这个库使我们能够创建 UserDefaults 管理的值的快照。
这个快照意味着一个不可变的数据模型,它可以非常有效地嵌入到状态管理的状态中。
此对象只是一个模式,用于投影 UserDefaults 管理的键。
所以没有命名空间,请仔细命名键。
final class MyDefaults: UserDefaultsObject {
@Property(key: "count") var count = 0
@OptionalProperty(key: "name") var name: String?
}
💎 如上所述,此对象只是一个模式,类似于访问 UserDefaults 的代理(技术上是 UserDefaults 字典的表示)
指定的键将直接用于读取和写入。
这意味着我们可以随时开始和停止使用这个库!
并且不需要投影 UserDefaults 上的所有键。
我们只投影我们想要放在快照上的键。
我们可以为每个用例创建多个模式。
Property
- 一个非可选值属性,如果 UserDefautls 返回 nil,则返回初始化的值。OptionalProperty
- 一个可选值属性let userDefaults = UserDefaults.init("your_userdefaults")!
let persistentStore = UserDefaultsPersistentStore<MyDefaults>(userDefaults: userDefaults)
由于创建了一个模式,我们可以类型安全地修改该值。
persistentStore.write { d in
d.name = "John"
}
XCTAssertEqual(userDefaults.string(forKey: "name"), "john") // ✅
使用快照读取 UserDefaults 管理的值。
快照读取由 UserDefaults 创建的底层字典。
与写入相同,由于创建了一个模式,我们可以类型安全地读取该值。
let snaphot: UserDefaultsSnapshot<MyDefaults> = persistentStore.makeSnapshot()
XCTAssertEqual(snaphot.name, "John") // ✅
UserDefaultsPersistentStore
在每次接收到指示 UserDefaults 更改的通知时,都会发布新的快照。
为此,它提供了 sinkSnapshot
方法。
let token = persistentStore.sinkSnapshot { snapshot in
// Receives initial snapshot and every time UserDefaults updated.
}
Verge 是一个状态管理库。
快照是一个引用类型,但它是一个不可变的数据模型。
它可以嵌入到值类型中,例如状态管理中存储的状态之类的东西。
struct MyState {
// ✅ Embed a snapshot here.
var defaults: UserDefaultsSnapshot<MyDefaults>
// 💡 We can add any computed property to munipulate the value and provides.
var localizedName: String {
defaults.name + "+something"
}
}
let persistentStore: UserDefaultsPersistentStore<MyDefaults>
let store: MyStore<MyState, Never> = .init(initialState: .init(defaults: persistentStore.makeSnapshot())
let token = persistentStore.sinkSnapshot { [weak store] snapshot in
// ✅ Updates a snapshot every updates.
store?.commit {
$0.defaults = snapshot
}
}
使用 store
let store: MyStore<MyState, Never>
store.sinkState { state in
state.ifChanged(\.localizedName) { value in
print(value) // "John+something"
}
}
使用以下安装方法导入模块。
import UserDefaultsSnapshotLib
CocoaPods
CocoaPods 是 Cocoa 项目的依赖项管理器。 有关用法和安装说明,请访问他们的网站。 要使用 CocoaPods 将 Alamofire 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它
pod 'UserDefaultsSnapshotLib'
SwiftPM
Swift Package Manager 是一种用于自动化 Swift 代码分发的工具,并已集成到 swift
编译器中。 它还处于早期开发阶段,但 Alamofire 确实支持在受支持的平台上使用它。
设置好 Swift 包后,添加 Alamofire 作为依赖项就像将其添加到 Package.swift
的 dependencies
值一样简单。
dependencies: [
.package(url: "https://github.com/VergeGroup/UserDefaultsSnapshot.git", .upToNextMajor(from: "1.0.0"))
]
UserDefaultsSnapshot 在 MIT 许可证下发布。