FlatCache 0.1.0

FlatCache 0.1.0

Ryan Nystrom维护。



FlatCache 0.1.0

  • 作者:
  • Ryan Nystrom

FlatCache

通过String id将任何对象存储在扁平缓存中,并在发生变化时通知监听器。

这是用于GitHawk的GitHawkThe 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 会合并事件,无论更新只涉及一个对象还是数百个对象,都只传递一个事件。

致谢