UserDefaultsSnapshot
这个库允许我们创建 UserDefaults 管理的值的快照。
快照意味着一个不可变的数据模型,可以非常有效地嵌入到状态管理中。
概述
从 UserDefaults 创建快照的模式
此对象仅是一个模式,它反映了 UserDefaults 管理的键。
因此没有任何命名空间,请在命名键时仔细。
final class MyDefaults: UserDefaultsObject {
@Property(key: "count") var count = 0
@OptionalProperty(key: "name") var name: String?
}
💎 正如上面提到的,此对象仅是一个模式,就像访问 UserDefaults 的代理(技术上表示为 UserDefaults 字典)
指定的键将用于直接读/写。
这意味着我们可以随时开始或停止使用此库!
无需将UserDefaults上的所有键都展现在上面。
我们只需将我们想要的键放入快照中。
我们还可以为每个用例创建多个模式。
属性
属性
- 一个非可选的值属性,如果 UserDefaults 返回 nil,则返回初始化值。OptionalProperty
- 一个可选值属性
创建持久存储
let userDefaults = UserDefaults.init("your_userdefaults")!
let persistentStore = UserDefaultsPersistentStore<MyDefaults>(userDefaults: userDefaults)
UserDefaultsPersistentStore
上写入值
在 通过创建模式,我们可以安全地使用类型修改值。
persistentStore.write { d in
d.name = "John"
}
XCTAssertEqual(userDefaults.string(forKey: "name"), "john") // ✅
从持久存储读取值
使用快照从 UserDefaults 管理的值中读取。
snapshot 读取由 UserDefaults 创建的表示底层字典的快照。
与写入类似,由于创建了模式,我们可以安全地读取值。
let snaphot: UserDefaultsSnapshot<MyDefaults> = persistentStore.makeSnapshot()
XCTAssertEqual(store.makeSnapshot().name, "John") // ✅
订阅每个 UserDefaults 更新时的快照
UserDefaultsPersistentStore
每接收到表示 UserDefaults 发生变化的通知,就发布新的快照。
因此,它提供了 sinkSnapshot
方法。
let token = store.sinkSnapshot { snapshot in
// Receives initial snapshot and every time UserDefaults updated.
}
与 Verge 的集成
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 = store.sinkSnapshot { [weak store] snapshot in
// ✅ Updates a snapshot every updates.
store?.commit {
$0.defaults = snapshot
}
}
使用存储
let store: MyStore<MyState, Never>
store.sinkState { state in
state.ifChanged(\.localizedName) { value in
print(value) // "John+something"
}
}
安装
使用以下安装方法导入模块。
import UserDefaultsSnapshotLib
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。有关使用和安装说明,请访问他们的网站。要将 Alamofire 集成到您的 Xcode 项目中,请使用 CocoaPods 并在您的 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 许可下发布。