FlatCache
通过String
id将任何对象存储在扁平缓存中,并在发生变化时通知监听器。
这是用于GitHawk的GitHawk中The Flat Cache博客文章的Soroush Khanlou实现的实现。
安装
只需将FlatCache
添加到Podfile并运行pod install即可。完成!
pod 'ContextMenu'
用法
将Cachable
协议添加到您想要存储在缓存中的模型。通过返回一个用于查找的String
标识符来遵守该协议。
struct User {
let name: String
}
extension User: Cachable {
var id: String {
return name
}
}
不用担心对象之间的
id
冲突。缓存通过类型对不同的模型进行“命名空间”。
现在只需创建一个FlatCache
对象,并用它来读写。
let cache = FlatCache()
let user = User(name: "ryan")
cache.set(user)
if let cached = cache.get(user) as User? {
print(user.name) // "ryan"
}
FlatCache
使用get()
函数与类型信息协同工作以查找适当的对象。您必须以某种方式对结果进行类型化。
监听器
FlatCache
的一大优势是向缓存添加“监听器”,以便在对象更改时得到通知。这个强大的工具让多个系统可以响应对象变化。
let cache = FlatCache()
let user = User(name: "ryan")
let listener = MyUserListener()
cache.add(listener: listener, value: user)
现在每当在缓存中再次设置 user
时,MyUserListener
将通过以下函数得到通知
func flatCacheDidUpdate(cache: FlatCache, update: FlatCache.Update) {
switch update {
case .item(let item):
// just a single object updated
case .list:
// a list of subscribed objects updated
}
}
FlatCache
会合并事件,无论更新只涉及一个对象还是数百个对象,都只传递一个事件。
致谢
- 使用的代码和灵感来自 Soroush Khanlou 的 The Flat Cache
- 由
❤️ 由 Ryan Nystrom 制作