iOS开发swift版异步加载网络图片(带缓存和缺省图片)

iOS开发之swift版异步加载网络图片

    与SDWebImage异步加载网络图片的功能相似,只是代码比较简单,功能没有SD的完善与强大,支持缺省添加图片,支持本地缓存。

     异步加载图片的核心代码如下:

 func setZYHWebImage(url:NSString?, defaultImage:NSString?, isCache:Bool){
        var ZYHImage:UIImage?
        if url == nil {
            return
        }
        //设置默认图片
        if defaultImage != nil {
            self.image=UIImage(named: defaultImage!)
        }
        //是否进行缓存处理
        if isCache {
        //缓存管理类
            var data:NSData?=ZYHWebImageChcheCenter.readCacheFromUrl(url!)
            if data != nil {
                ZYHImage=UIImage(data: data!)
                self.image=ZYHImage
            }else{
            //获取异步线程
               var dispath=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
                dispatch_async(dispath, { () -> Void in
                    var URL:NSURL = NSURL(string: url!)!
                    var data:NSData?=NSData(contentsOfURL: URL)
                    if data != nil {
                        ZYHImage=UIImage(data: data!)
                        //写缓存
                        ZYHWebImageChcheCenter.writeCacheToUrl(url!, data: data!)
                        //主线程中刷新UI
                        dispatch_async(dispatch_get_main_queue(), { () -> Void in
                            //刷新主UI
                            self.image=ZYHImage
                        })
                    }
                    
                })
            }
        }else{
            var dispath=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
            dispatch_async(dispath, { () -> Void in
                var URL:NSURL = NSURL(string: url!)!
                var data:NSData?=NSData(contentsOfURL: URL)
                if data != nil {
                    ZYHImage=UIImage(data: data!)
                    //写缓存
                    dispatch_async(dispatch_get_main_queue(), { () -> Void in
                        //刷新主UI
                        self.image=ZYHImage
                    })
                }
                
            })
        }
    }
    
}

缓存的处理这里采用的是写文件的方式,通过文件名来对缓存进行管理,这个框架还不完善,后面会加入缓存清除等功能。缓存的核心代码如下:

class func readCacheFromUrl(url:NSString)->NSData?{
        var data:NSData?
        var path:NSString=ZYHWebImageChcheCenter.getFullCachePathFromUrl(url)
        if NSFileManager.defaultManager().fileExistsAtPath(path) {
            data=NSData.dataWithContentsOfMappedFile(path) as? NSData
        }
        return data
    }
    
    class func writeCacheToUrl(url:NSString, data:NSData){
        var path:NSString=ZYHWebImageChcheCenter.getFullCachePathFromUrl(url)
       println(data.writeToFile(path, atomically: true))
    }
    //设置缓存路径
    class func getFullCachePathFromUrl(url:NSString)->NSString{
        var chchePath=NSHomeDirectory().stringByAppendingString("/Library/Caches/MyCache")
        var fileManager:NSFileManager=NSFileManager.defaultManager()
        fileManager.fileExistsAtPath(chchePath)
        if !(fileManager.fileExistsAtPath(chchePath)) {
            fileManager.createDirectoryAtPath(chchePath, withIntermediateDirectories: true, attributes: nil, error: nil)
        }
        //进行字符串处理
        var newURL:NSString
        newURL=ZYHWebImageChcheCenter.stringToZYHString(url)
        chchePath=chchePath.stringByAppendingFormat("/%@", newURL)
        return chchePath
    }
    
    class func stringToZYHString(str:NSString)->NSString{
        var newStr:NSMutableString=NSMutableString()
        for var i:NSInteger=0; i < str.length; i++ {
            var c:unichar=str.characterAtIndex(i)
            if (c>=48&&c<=57)||(c>=65&&c<=90)||(c>=97&&c<=122){
                newStr.appendFormat("%c", c)
            }
        }
        return newStr.copy() as NSString
        
    }

框架的github地址,欢迎指正与扩展:https://github.com/ZYHshao/swift-ZYHWebImage

因xcode的版本不同,swift语言语法随环境时常会变化,此版本在6.1中可用,更高版本中需要修改少部分即可。

专注技术,热爱生活,交流技术,也做朋友。 ——珲少 QQ群:203317592

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ios 技术积累

ios 跳转第三方App文档预览

今天有个需求,从App上下载附件可预览,产品要求简单实现就是跳转第三方App预览即可

1994
来自专栏進无尽的文章

基础篇- 沙盒以及文件的操作和存取

iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被称为沙盒,所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列...

1821
来自专栏Alice

kvo深入浅出举例

一,概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对...

1965
来自专栏Jacklin攻城狮

iOS开发中的这些权限,你搞懂了吗?

![Uploading 144446-b8aca7ba38c5f8c0_695906.png . . .]获取相册权限

1974
来自专栏王大锤

iOS 处理缓存的三种方法

3379
来自专栏進无尽的文章

编码篇 - iOS各种权限状态的获取及注意事项

关于系统权限的获取,相信大家都不陌生,可是其中蕴含的知识确实不少。 怎样向用户索取权限是非常重要的。例如LBS类的应用,如果在索取权限时遭到用户的拒绝,那么该...

3162
来自专栏coding...

iOS开发实战-时光记账Demo 网络版效果分析客户端部分服务端部分Demo地址简书主页

user表 相反Tally与Users的关系就是:一对多

942
来自专栏一“技”之长

SDWebImage源码分析 原

     SDWebImage是iOS开发中非常流行的一个网络图片加载库,如果你观察其源码,会发现其中的文件非常多,虽然文件数很多,但是作者的代码结构和条理却是...

2273
来自专栏ShaoYL

iOS----轻松掌握AFN网络顶级框架

3037
来自专栏DannyHoo的专栏

解决“真机上不能读取本地路径”的问题d

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

1532

扫码关注云+社区

领取腾讯云代金券