HanekeSwift iOS
简介 :
iOS中有很多图像缓存库,很多库都是用Objective-C编写的,但是HenekeSwift是用swift编写的,非常易于缓存,它为UIImage,NSData,JSON,字符串或可以作为数据读取或写入的任何其他类型。
特点:
- 通用缓存,具有对UIImage,NSData,JSON和String的开箱即用支持
- 使用NSCache的一级内存缓存
- 使用文件系统的二级LRU磁盘缓存
- 从网络或磁盘异步获取原始值
- 所有磁盘访问均在后台执行
- 线程安全
- 根据内存警告或磁盘容量自动将缓存逐出
- 全面的单元测试
- 通过定义自定义格式,支持其他类型或实现自定义提取程序可扩展
- 对于图像:
- 零配置UIImageView和UIButton扩展以使用缓存,针对UITableView和UICollectionView单元重用进行了优化
- 调整背景图片的大小和解压缩
图片:
特别是Haneke擅长处理图像。 它包括一个具有自动调整大小的零配置图像缓存。 一切都在后台完成,从而实现快速响应的滚动。
您可以加载,调整大小,在共享缓存中缓存并显示来自url的适当大小的图像是:
imageView.hnk_setImageFromURL //设置远程图像
您可以使用键手动设置图像。需要提供键。
imageView.hnk_setImage(图像,键:键)
上面的行照顾:
1)如果图像url或图像缓存在内存中,它将基于图像内容模式或此任务在后台执行的图像视图范围检索图像
2)如果未缓存图像,则从Web或源获取原始图像并根据imageview大小生成图像。从共享NSURLCache检索的远程图像(如果有)。
3)缓存结果图像
4)如果磁盘已满或其他任何问题,它将清除缓存中最近最少使用的图像
您还可以使用imageCache instance设置图像 。
例如 ,
让imageCache = Shared.imageCache
imageCache.set(值:UIImage(名称:“您在此处输入图像字符串”),键:“ image”)
使用获取图像
imageCache.fetch(key:“ image”)。onSuccess {(image)in
//在这里设置图片
} .onFailure {(错误)
//如果图片不可用则报错
}
NSData:
您可以使用dataCache实例设置和获取NSData。
例如,
创建NSData缓存
let dataCache = Shared.dataCache //缓存(名称:“ data”)
//设置数据
let data = NSData(contentsOfURL:NSURL(string:“ https://api.github.com/users/haneke”)!)!
dataCache.set(value:data !, key:“ data”)
//使用键获取缓存数据
dataCache.fetch(key:“ data”)。onSuccess {(data)in
//在这里您可以获取缓存数据
} .onFailure {(错误)
打印(“错误\(错误?.localizedDescription)”)
}
串:
您可以使用stringCache实例缓存和获取字符串值
例如,
板条箱字符串缓存
let strCache = Shared.stringCache //缓存(名称:“ string”)
strCache.set(值:“您好,欢迎来到Hanekeswift”,键:“ str”)
strCache.fetch(key:“ str”)。onSuccess {(strRes)在
//你在这里串
} .onFailure {(错误)
打印(“获取字符串时出现错误\(错误!.localizedDescription)”)
}
您可以使用它删除缓存键
strCache.remove(key:“ str”)
格式:
格式允许指定磁盘缓存大小以及在缓存之前对值的任何转换。
例如 UIImageView扩展使用的格式可以根据需要调整图像的大小以适合或填充图像视图。您还可以使用自定义格式。
例如,如果您想将图标的磁盘容量限制为10MB,并对图像应用圆角。
让缓存= Shared.imageCache
let iconFormat = Format (name:“ icons”,diskCapacity:10 * 1024 * 1024){image in
返回//编写自己的自定义格式
}
cache.addFormat(iconFormat)
让URL = NSURL(字符串:“图像源字符串”)!
cache.fetch(URL:URL,formatName:“ icons”)。onSuccess {image in
//结果图像在这里
}
您也可以直接在imageview上设置结果图像:
imageView.hnk_setImageFromURL(URL,格式:iconFormat)
这里缓存使用“图标”格式。它将在后台执行格式转换并返回结果值
您还可以设置String的格式,假设上面的字符串示例我们可以添加format
例如,
let strFormat = Format (name:“ attStr”){(str)->字符串输入
返回self.appedStr(str)
}
strCache.addFormat(strFormat)
strCache.set(value:“ Hello”,键:“ string”,formatName:“ attStr”,成功:{(str)in
打印(str)
})
strCache.fetch(key:“ string”,formatName:“ attStr”,失败:{(错误)在
print(“获取格式为String \(error?.localizedDescription)时出错”)
},成功:{(strRes)in
//这里是字符串
})
func appedStr(strname:String)->字符串{
让strFinal =“ \(strname)****** Test”
返回strFinal
}
您可以使用带有键的字符串格式名称来删除格式字符串
strCache.remove(键:“字符串”,格式名:“ attStr”)
注意 :如果使用strCache.remove(key:“ string”)删除格式缓存,则不会删除具有格式的字符串
支脚:
url和路径的获取功能实际上是方便的方法。
这是通过显式使用网络提取程序从url提取数据的另一种方法。
让URL = NSURL(字符串:“ http://haneke.io/icon.png”)!
让fetcher = NetworkFetcher (URL:URL)
cache.fetch(fetcher:fetcher).onSuccess {
//对图片进行处理
}
在上面的示例中,只有在内存或磁盘缓存中没有与“ http://haneke.io/icon.png”相关联的值时,提取器才会执行。如果发生这种情况,则提取器将负责提取原始内容值,然后将其缓存以避免进一步的网络活动。
定制饲养员:
通过自定义提取程序,您可以从网络或磁盘以外的其他来源(例如,核心数据)中获取原始值,甚至可以更改Haneke对网络或磁盘的访问方式(例如,使用Alamofire代替NSURLSession进行网络连接)。 定制的访存程序必须是Fetcher 的子类,并且负责:
- 提供与要获取的值关联的键(例如,对于NetworkFetcher,为NSURL.absoluteString)
- 在主队列中都在后台获取值并相应地调用成功或失败关闭
- 如果可能,取消按需获取
提取程序是通用的,并且对其类型的唯一限制是它必须实现DataConvertible。
支持其他类型:
Heneke可以缓存任何可以读取并保存为数据的类型。 。 通过实施协议DataConvertible和DataRepresentable向Haneke指出了这一点。
公共协议DataConvertible {
类型别名结果
类func convertFromData(data:NSData)->结果?
}
公共协议DataRepresentable {
func asData()-> NSData!
}
下面的示例我们如何支持字典
扩展名NSDictionary:DataConvertible,DataRepresentable {
公共类型别名结果= NSDictionary
公共类func convertFromData(data:NSData)->结果? {
返回NSKeyedUnarchiver.unarchiveObjectWithData(data)为吗? NSDictionary
}
公共功能asData()-> NSData! {
返回NSKeyedArchiver.archivedDataWithRootObject()
}
}
那么创建一个NSDictionary缓存将很简单:
让缓存=缓存(名称:“ dicData”)
cacheDic.set(值:self.dic !,键:“ dicData”)
cacheDic.fetch(key:“ dicData”)。onSuccess {(dic)in
//这里的字典
}
Heneke对于图像缓存以及String,NSData,JSON的类型以及可以作为数据进行读取和写入的类型(例如NSDictionary)非常有用。它设计迅速。
Haneke与其他库之间的一个主要区别是,它更易于使用。Haneke在后台执行所有操作,无需设置任何设置。
如果您有任何疑问,请与我联系 直。
如果喜欢,请分享。