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

目录
相关文章
|
5天前
|
机器学习/深度学习 TensorFlow Swift
Swift语言适合多个领域的开发
Swift语言适合多个领域的开发
27 9
|
5天前
|
安全 编译器 Swift
Swift开发
Swift开发
21 9
|
27天前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
102 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
4天前
|
API
鸿蒙开发:切换至基于rcp的网络请求
本文的内容主要是把之前基于http封装的库,修改为当前的Remote Communication Kit(远场通信服务),无非就是通信的方式变了,其他都大差不差。
鸿蒙开发:切换至基于rcp的网络请求
|
7天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
25 9
|
1月前
|
XML 开发工具 Android开发
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
ExoPlayer最初是为了解决Android早期MediaPlayer控件对网络视频兼容性差的问题而推出的。现在,Android官方已将其升级并纳入Jetpack的Media3库,使其成为音视频操作的统一引擎。新版ExoPlayer支持多种协议,解决了设备和系统碎片化问题,可在整个Android生态中一致运行。通过修改`build.gradle`文件、布局文件及Activity代码,并添加必要的权限,即可集成并使用ExoPlayer进行网络视频播放。具体步骤包括引入依赖库、配置播放界面、编写播放逻辑以及添加互联网访问权限。
131 1
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
|
21天前
|
安全 API Swift
探索iOS开发中的Swift语言之美
【10月更文挑战第23天】在数字时代的浪潮中,iOS开发如同一艘航船,而Swift语言则是推动这艘船前进的风帆。本文将带你领略Swift的独特魅力,从语法到设计哲学,再到实际应用案例,我们将一步步深入这个现代编程语言的世界。你将发现,Swift不仅仅是一种编程语言,它是苹果生态系统中的一个创新工具,它让iOS开发变得更加高效、安全和有趣。让我们一起启航,探索Swift的奥秘,感受编程的乐趣。
|
1月前
|
安全 Swift iOS开发
探索iOS开发中的Swift语言之美
在数字时代的浪潮中,移动应用已成为日常生活的延伸。本文将深入探讨iOS平台上的Swift编程语言,揭示其背后的设计哲学、语法特性以及如何利用Swift进行高效开发。我们将通过实际代码示例,展示Swift语言的强大功能和优雅简洁的编程风格,引导读者理解并运用Swift解决实际问题。
|
2月前
|
机器学习/深度学习 缓存 NoSQL
深度学习在图像识别中的应用与挑战后端开发中的数据缓存策略
本文深入探讨了深度学习技术在图像识别领域的应用,包括卷积神经网络(CNN)的原理、常见模型如ResNet和VGG的介绍,以及这些模型在实际应用中的表现。同时,文章也讨论了数据增强、模型集成等改进性能的方法,并指出了当前面临的计算资源需求高、数据隐私等挑战。通过综合分析,本文旨在为深度学习在图像识别中的进一步研究和应用提供参考。 本文探讨了后端开发中数据缓存的重要性和实现方法,通过具体案例解析Redis在实际应用中的使用。首先介绍了缓存的基本概念及其在后端系统性能优化中的作用;接着详细讲解了Redis的常见数据类型和应用场景;最后通过一个实际项目展示了如何在Django框架中集成Redis,
|
2月前
|
安全 Swift iOS开发
探索iOS开发之旅:Swift语言的魅力与挑战
【9月更文挑战第21天】在这篇文章中,我们将一起潜入iOS开发的海洋,探索Swift这门现代编程语言的独特之处。从简洁的语法到强大的功能,Swift旨在让开发者能够以更高效、更安全的方式构建应用程序。通过实际代码示例,我们会深入了解Swift如何简化复杂任务,并讨论它面临的挑战和未来的发展方向。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和知识。
46 4