AwesomeCache 5.0

AwesomeCache 5.0

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2016年11月
SwiftSwift 版本3.0
SPM支持 SPM

Alexander Schuch 维护。



Awesome Cache

出色的磁盘缓存(使用 Swift 编写)。由 NSCache 支持,提供最大的性能和对单对象过期时间的支持。

使用方法

do {
    let cache = try Cache<NSString>(name: "awesomeCache")

    cache["name"] = "Alex"
    let name = cache["name"]
    cache["name"] = nil
} catch _ {
    print("Something went wrong :(")
}

设计同步

AwesomeCache >= 3.0 是为具有同步 API 而设计的,这使得推理缓存的实际内容变得容易。这一决策是基于社区的反馈(社区反馈),以保持 AwesomeCache API 的小巧易用。

缓存的内部使用一个并发分派队列,用于线程安全地同步读取和写入。如果在特定的缓存操作中某个操作阻塞了您的主线程太长时间,请考虑将读取和写入操作卸载到一个不同的线程。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
    cache["name"] = "Alex"
}

缓存过期

对象也可以在一定时间内进行缓存。

cache.setObject("Alex", forKey: "name", expires: .Never) // same as cache["name"] = "Alex"
cache.setObject("Alex", forKey: "name", expires: .Seconds(2)) // name expires in 2 seconds
cache.setObject("Alex", forKey: "name", expires: .Date(Date(timeIntervalSince1970: 1428364800))) // name expires on 4th of July 2015

如果在对象过期后访问它,它将被自动从缓存中删除,并从磁盘上删除。但是,您负责定期通过调用 removeExpiredObjects 删除过期的对象(例如在应用启动时)。

Awesome API 缓存

API 响应是通常缓存一段时间。

cache.setObject(forKey: "name", cacheBlock: { success, failure in
  // Perform tasks, e.g. call an API
  let response = ...

  success(response, .Seconds(300)) // Cache response for 5 minutes
  // ... or failure(error)
}, completion: { object, isLoadedFromCache, error in
    if object {
        // object is now cached
    }
})

如果缓存中已存在对象,则立即用缓存的对象调用 completion 块。

如果没有找到对象或缓存的已在过期,将调用 cacheBlock。您可以在该块中执行任何任务(例如网络调用)。任务完成后,请确保调用传递给 cacheBlocksuccessfailure 块。在对象过期或手动删除之前,将不会重新评估 cacheBlock。缓存的完成块将在 cacheBlock 完成并缓存对象后立即调用。

completion 块在 cacheBlock 完成并缓存对象后立即调用。

版本兼容性

当前 Swift 兼容性分解

Swift 版本 框架版本
3.0 master
2.3 4.x
2.2 3.x

安装

手动安装

只需将两个 .swift 文件拖到你的项目中 AwesomeCache 文件夹。

测试

打开 Xcode 项目,按 ⌘-U 运行测试。

或者,所有测试都可以在终端中使用 xctool 运行。

xctool -scheme AwesomeCacheTests -sdk iphonesimulator test

贡献

  • 创造一些精彩的东西,改善代码,添加一些功能,等等(这是最难的部分)。
  • 进行分叉
  • 创建新分支以实现你的更改
  • 将你的更改提交到你的分支
  • 提交一个 pull request

联系

随时联系我们。