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

简介: 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中可用,更高版本中需要修改少部分即可。

目录
相关文章
|
28天前
|
安全 Linux 虚拟化
Cisco IOS XRv 9000 Router IOS XR Release 7.11.2 MD - 思科 IOS XR 网络操作系统
Cisco IOS XRv 9000 Router IOS XR Release 7.11.2 MD - 思科 IOS XR 网络操作系统
97 3
Cisco IOS XRv 9000 Router IOS XR Release 7.11.2 MD - 思科 IOS XR 网络操作系统
|
机器学习/深度学习 TensorFlow Swift
Swift语言适合多个领域的开发
Swift语言适合多个领域的开发
339 9
|
安全 编译器 Swift
Swift开发
Swift开发
344 9
|
8月前
|
XML 前端开发 API
Kanna 与 Swift:结合使用提升网络请求效率
Kanna 与 Swift:结合使用提升网络请求效率
|
10月前
|
缓存 负载均衡 安全
Swift中的网络代理设置与数据传输
Swift中的网络代理设置与数据传输
|
12月前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
306 9
|
12月前
|
JSON 数据处理 Swift
Swift 中的网络编程,主要介绍了 URLSession 和 Alamofire 两大框架的特点、用法及实际应用
本文深入探讨了 Swift 中的网络编程,主要介绍了 URLSession 和 Alamofire 两大框架的特点、用法及实际应用。URLSession 由苹果提供,支持底层网络控制;Alamofire 则是在 URLSession 基础上增加了更简洁的接口和功能扩展。文章通过具体案例对比了两者的使用方法,帮助开发者根据需求选择合适的网络编程工具。
291 3
|
12月前
|
安全 开发工具 Swift
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
352 2
|
12月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
298 2

热门文章

最新文章

相关课程

更多