测试已测试 | ✓ |
Lang语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2016年11月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Alexander Schuch 维护。
出色的磁盘缓存(使用 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
删除过期的对象(例如在应用启动时)。
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
。您可以在该块中执行任何任务(例如网络调用)。任务完成后,请确保调用传递给 cacheBlock
的 success
或 failure
块。在对象过期或手动删除之前,将不会重新评估 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
随时联系我们。