测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可 | MIT |
发布最新发布 | 2017 年 5 月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Macbook 维护。
LeanCache 允许您缓存并持久化遵循 NSCoding 的普通对象。要使用 LeanCache 与基于值的 struct 模型,只需创建一个实现 NSCoding 的类,并将您的模型包装起来。
使用 LeanCache,您可以掌控自己的命运!这是因为 LeanCache 对您希望如何缓存事物以及您需要创建自己的对象缓存生命周期几乎没有假设。
您只需以如下模型开始,但显然可以很容易地修改此流程以满足您的需求。
struct ExampleObject {
let name: String
let age: Int
let favoriteLanguage: String
init(name: String, age: Int, favoriteLanguage: String) {
self.name = name
self.age = age
self.favoriteLanguage = favoriteLanguage
}
}
接下来,您会创建一个缓存类型协议并为您的模型实现一个编码器
protocol ExampleObjectCacheType {
func get() -> ExampleObject?
func set(object: ExampleObject)
}
class ExampleObjectCoder: NSObject, NSCoding {
let exampleObject: ExampleObject?
init(exampleObject: ExampleObject) {
self.exampleObject = exampleObject
}
required init?(coder: NSCoder) {
if let name = coder.decodeObjectForKey("name") as? String,
let age = coder.decodeObjectForKey("age") as? Int,
let favoriteLanguage = coder.decodeObjectForKey("favorite_language") as? String {
self.exampleObject = ExampleObject(name: name, age: age, favoriteLanguage: favoriteLanguage)
} else {
self.exampleObject = nil
}
}
func encodeWithCoder(coder: NSCoder) {
coder.encodeObject(self.exampleObject?.name, forKey: "name")
coder.encodeObject(self.exampleObject?.age, forKey: "age")
coder.encodeObject(self.exampleObject?.favoriteLanguage, forKey: "favorite_language")
}
}
然后,为您的模型创建一个缓存包装器
class ExampleObjectCache: NSObject, ExampleObjectCacheType {
let cache: Cache<ExampleObjectCoder>
override init() {
self.cache = Cache(name: "exampleObject")
}
func get() -> ExampleObject? {
return self.cache.get()?.exampleObject
}
func set(object: ExampleObject) {
let coder = ExampleObjectCoder(exampleObject: object)
self.cache.set(coder)
}
}
最后,您可以与您的缓存交互并持久化新对象
let andrew = ExampleObject(name: "Andrew", age: 25, favoriteLanguage: "Swift")
let mariah = ExampleObject(name: "Mariah", age: 22, favoriteLanguage: "Objective-C")
let cache = ExampleObjectCache()
cache.set(andrew)
print(cache.get()?.name) // "Andrew"
//get model from persistent cache
cache.set(mariah)
print(ExampleObjectCache().get()?.name) // "Mariah"
由 Klaas Pieter https://github.com/klaaspieter 编写,并由 Andrew Sowers https://github.com/asowers1 移植到 Swift 3 / pod 化