测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最新发布 | 2017年4月 |
SwiftSwift 版本 | 3.1 |
SPM支持SPM | ✗ |
由Ivan Rublev维护。
PersistentStorageSerializable
是一个协议,用于将 Swift 类、结构体或 NSObject 子类对象自动序列化和反序列化到和从 User Defaults 或 Property List 文件。
采用该类型属性必须是属性列表类型(String、Data、Date、Int、UInt、Float、Double、Bool、Array 或以上类型的字典)。如果您想存储其他类型的对象,您通常需要将其存档以创建一个 Data 实例。URL 属性可以存储在 User Defaults 存储中,但不能存储在 Plist 存储中。在后一种情况下,您必须将它们存档到/从前面转换为 Data。
PersistentStorageSerializable
协议提供了 init(from:)
构造函数和 persist()
函数的默认实现。该库定义了两种 PersistentStorage
协议的类型:UserDefaultsStorage
和 PlistStorage
。将其中之一作为参数传递给 init(from:)
构造函数调用来指定要用于序列化/反序列化的存储。
PersistentStorageSerializable
协议的函数遍历采用类型对象,并通过 Reflection 库获取/设置其属性值。NSObject 类继承的属性值通过 KVC 获取/设置。
使用以下示例通过 UserDefaultStorage
序列化和反序列化具有 User Defaults 的结构体
struct Settings: PersistentStorageSerializable {
var flag = false
var title = ""
var number = 1
var dictionary: [String : Any] = ["Number" : 1, "Distance" : 25.4, "Label" : "Hello"]
// MARK: Adopt PersistentStorageSerializable
var persistentStorage: PersistentStorage!
var persistentStorageKeyPrefix: String! = "Settings"
}
// Init from User Defaults
let mySettings = Settings(from: UserDefaultsStorage.standard)
mySettings.flag = true
// Persist into User Defaults
mySettings.persist()
使用 PlistStorage
类将数据序列化到 Plist 文件中
// Init from plist
let plistUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last!.appendingPathComponent("storage.plist")
let settingsOnDisk = try! Settings(from: PlistStorage(at: plistUrl))
mySettings.flag = true
// Persist on disk
try! mySettings.persist()
当您以前版本的应用程序中持久化了一些数据,并希望将数据读取到一个结构体中时,您需要通过重载 persistentStorageKey(for:)
函数提供属性名称和 User Defaults 键之间的映射。
假设我们有以下数据已保存在 User Defaults 中
UserDefaults.standard.set("Superhero", forKey: "oldGoogTitle")
UserDefaults.standard.set(true, forKey: "well.persisted.option")
我们希望这些数据使用 ApplicationConfiguration
类的对象进行序列化。
final class ApplicationConfiguration: PersistentStorageSerializable {
var title = ""
var showIntro = false
// MARK: Adopt PersistentStorageSerializable
var persistentStorage: PersistentStorage!
var persistentStorageKeyPrefix: String!
}
// Provide key mapping by overloading `persistentStorageKey(for:)` function.
extension ApplicationConfiguration {
func persistentStorageKey(for propertyName: String) -> String {
let keyMap = ["title" : "oldGoogTitle", "showIntro" : "well.persisted.option"]
return keyMap[propertyName]!
}
}
// Now we can load data persisted in the storage.
let configuration = try! ApplicationConfiguration(from: UserDefaultsStorage.standard)
print(configuration.title) // prints Superhero
print(configuration.showIntro) // prints true
要在终端运行示例项目,请运行 pod try PersistentStorageSerializable
PersistentStorageSerializable 可以通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中
pod "PersistentStorageSerializable"
然后运行 pods update
或 pods install
。
版权所有 (c) 2017, IvanRublev, [email protected]
PersistentStorageSerializable 采用 MIT 许可。有关更多信息,请参阅 LICENSE 文件。