LeanCache 0.2.1

LeanCache 0.2.1

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最新发布2017 年 5 月
SwiftSwift 版本3.0
SPM支持 SPM

Macbook 维护。



LeanCache 0.2.1

LeanCache💁

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 化