Github项目地址:https://github.com/Haneke/HanekeSwiftgit
Haneke是一个用swift写成的轻量级iOS类,以简单好用著称(design-decisions-behind-haneke-1-0),有多简单呢?github
假如你要初始化一个JSON缓存,将目标从URL获取:算法
let cache = Cache<JSON>(name: "github") let URL = NSURL(string: "https://api.github.com/users/haneke") cache.fetch(URL: URL).onSuccess { JSON in println(JSON.dictionary?["bio"]) }
就是这么简单。swift
Haneke 还提供了内存缓存以及LRU(最少使用算法)闪存缓存,支持的格式有 UIImage, NSData, JSON, String 等等……换句话说,只要是可以读写为 data格式的,就能缓存。api
另外,Haneke 很是善于处理图片任务:不须要额外操做就能够自动处理图片大小,这一切都在后台完成,可让主界面UI更流畅。载入,缩放图片,缓存和显示适配图片仅仅只须要一行代码:xcode
imageView.hnk_setImageFromURL(url)
一些特性:缓存
尤为对于images来讲:安全
要求是iOS 8.0以及以上可能比较苛刻,由于苹果刚刚公布的数据是iOS8占有率仍是只有48%,不过若是是全新的项目,那彻底能够关注一下Haneke。性能优化
集成到项目中:网络
Haneke 打包成了 Swift 框架. 目前最简单的引入方法
使用缓存:
Haneke 提供用于 UIImage, NSData, JSON 和String 的shared cache.你也能够建立你本身的缓存对象。
缓存以 key-value 进行.举个例子, 保存缓存而后从新获取:
let cache = Haneke.sharedDataCache cache.set(value: data, key: "funny-games.mp4") // 而后... cache.fetch(key: "funny-games.mp4").onSuccess { data in // data相关的操做能够在这里进行 }
在多数状况下,咱们老是要去网络或者闪存从新读取值,可是Haneke提供了简便的获取方法,回到第一个例子,此次使用shared cache:
let cache = Haneke.sharedJSONCache let URL = NSURL(string: "https://api.github.com/users/haneke") cache.fetch(URL: URL).onSuccess { JSON in println(JSON.dictionary?["bio"]) }
此次请求先会尝试从内存缓存中读取、而后是闪存和NSURLCache,假如没有找到数据,那Haneke 会从新获取网络数据而后进行缓存,在这个栗子中,URL 自己做为一个key保存。更多自定义的操做能够参考 formats, supporting additional types 或 implementingcustom fetchers.
♡ 更多对于 images的支持
针对图片的展现,Haneke 提供对UIImageView 、UIButton以及UITableView 和UICollectionView cell 重用时候的更多优化和简便方法。图片能够很好地被压缩和存储在缓存中。
// 设置一张网络图片 imageView.hnk_setImageFromURL(url) // 手动设置一张图片. 须要自定义key名. imageView.hnk_setImage(image, key: key)
以上代码:
Formats
Formats 容许在检查闪存缓存的大小和全部缓存以前的变化,再举一个栗子,UIImageView extension 用一个format 来放缩图片大小来获得适当的image。
你也能够自定义Formats ,好比你想将磁盘缓存大小限制到10MB或者给图片加上圆角:
let cache = Haneke.sharedImageCache let iconFormat = Format<UIImage>(name: "icons", diskCapacity: 10 * 1024 * 1024) { image in return imageByRoundingCornersOfImage(image) } cache.addFormat(iconFormat) let URL = NSURL(string: "http://haneke.io/icon.png") cache.fetch(URL: URL, formatName: "icons").onSuccess { image in // 图片变圆角了… }
咱们只须要告诉Haneke 咱们须要 "icons" 格式,那Haneke就会在后台帮咱们搞定,咱们只须要等待结果。
Formats 也能够用在 UIKit extensions:
imageView.hnk_setImageFromURL(url, format: iconFormat)
Fetchers
根据urls或者paths的获取方法至关的简便,网络获取举例:
let URL = NSURL(string: "http://haneke.io/icon.png") let fetcher = NetworkFetcher<UIImage>(URL: URL) cache.fetch(fetcher: fetcher).onSuccess { image in // 这里能够对image作些什么.. }
从网络或者闪存中获取原始数据的代价每每比较高,Fetchers就像一个代理同样,只会在Haneke真正须要的时候才发起获取操做。另外,fetcher 若是是从网络中获取数据的,那么fetcher 会将获取后的数据缓存起来。
自定义fetchers
Haneke 提供了两个特殊的fetchers:NetworkFetcher<T> and DiskFetcher<T>.你也能够经过继承fetchers<T> 来自定义fetchers 。经过自定义fetchers ,你能够从网络和闪存以外的另一些数据源中获取数据(好比 Core Data)。你甚至能够自定义 Haneke 访问网络或者闪存的方式,好比,用 Alamofire (相似于obj-c中的AFNetworking)来替代NSURLSession。一个自定义的 fetcer 必须继承自Fetcher<T> ,知足如下条件:
Fetchers 是泛型,因此对它的惟一限制是它必须符合类型匹配(DataConvertible)。只要数据可以存为 data,那Haneke 就能够缓存它。具体须要遵循DataConvertible 和DataRepresentable协议:
public protocol DataConvertible { typealias Result class func convertFromData(data:NSData) -> Result? } public protocol DataRepresentable { func asData() -> NSData! }
假如想让 NSDictionary 增长缓存支持:
extension NSDictionary : DataConvertible, DataRepresentable { public typealias Result = NSDictionary public class func convertFromData(data:NSData) -> Result? { return NSKeyedUnarchiver.unarchiveObjectWithData(data) as? NSDictionary } public func asData() -> NSData! { return NSKeyedArchiver.archivedDataWithRootObject(self) } }
以后,缓存 NSDictionary 就很容易了:
let cache = Cache<NSDictionary>(name: "dictionaries")
项目进展:
Haneke Swift 是一个正在进行中的项目, 它的API如今还并不很是稳定.