测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可 | MIT |
发布最后发布 | 2017年12月 |
SwiftSwift 版本 | 4.0 |
SPM支持 SPM | ✗ |
由 Matt Comi 维护。
Swift 的简单对象持久化。
包括对 NSUserDefaults
、NSUbiquitousKeyValueStore
和文件系统的支持。
要持久化一个对象,请用希望存储的存储库初始化一个 PersistentObject
。例如,将一个 Vehicle
持久化到一个文件中
let persistentVehicle = PersistentObject<Vehicle>(filename: "file.txt")
或者,将一个 Person
持久化到 NSUserDefaults
数据库中
let persistentPerson = PersistentObject<Person>(userDefaultsKey: personKey)
如果在存储库中已存在一个 PersistentObject
,即如果它之前已经被持久化,它将被解档并初始化。要访问底层对象
if let person = persistentPerson.object {
print("Hi, my name is \(person.name)")
}
如果存储库中尚不存在 PersistentObject
,您需要自己初始化它
if persistentPerson.object == nil {
persistentPerson.reset(Person(name: "Brian Doyle-Murray"))
}
当应用程序进入后台以及当 PersistentObject
被解构时,底层对象会自动归档到其存储库中。您也可以手动触发它
persistentPerson.save()
您还可以同步存储库
persistentPerson.synchronize()
通常情况下,手动同步仅在以下情况下是必要的
UbiquituousKeyValueStoreRepository
当前支持以下存储库
FileRepository
:持久化到文件UbiquituousKeyValueStoreRepository
:持久化到 UbiquituousKeyValueStore
UserDefaultsRepository
:持久化到 UserDefaults
数据库这些存储库要求被持久化的对象必须是 NSCoding
兼容的。
存储库可能支持外部更改。例如,当使用 UbiquituousKeyValueStoreRepository
时,值在 iCloud 中变化的可能。如果发生外部更改,PersistentObject
的底层对象将被替换,使得任何引用都无效。要在此情况发生时得到通知,请初始化 PersistentObject
时提供代理
let delegate = PersistentObjectDelegate<Person>()
delegate.objectChangedExternally = { (persistentObject) in
// handle the external change
}
let p = PersistentObject<Person>(
ubiquituousKeyValueStoreKey: "personKey",
delegate: delegate)
要提供一个自定义存储库,您可能需要实现 Repository
协议
public protocol Repository {
associatedtype ObjectType
var delegate: RepositoryDelegate<ObjectType> { get }
func archive(_ object: ObjectType?)
func unarchive() -> ObjectType
func synchronize()
}
然后,为了用那个 Repository
初始化一个 PersistentObject
let p = PersistentObject<Person>(repository: MyCustomRepository())