UserDefaultsStorable
UserDefaultsStorable 提供了一种简单、强类型的访问 UserDefaults 中属性的方法。
摘要
- 强类型:无需类型转换访问属性。
- Codable 支持:支持任何符合 Codable 协议的类型。
- 观察:用提供的键观察属性的改变。[
要求
- iOS 11.0+
- Xcode 11.4+
- Swift 5.2+
安装
Cocoapods
pod "UserDefaultsStorable"
Swift 包管理器
.package(url: "https://github.com/mrfour0004/UserDefaultsStorable", from: "2.0.0")
用法
要开始使用 UserDefaultsStorable
,只需声明一个具有给定键和默认值的 UserDefaults
属性。
enum Defaults {
@UserDefault(key: "username")
static var username: String = "mrfour0004"
// Of course type inference works as expected
@UserDefault(key: "displayName")
static var displayName = "mrfour"
// If the stored type is Optional, initial value is not required as normal optional properties
@UserDefault(key: "token")
static var token: String?
}
print(Defaults.username) // guest
print(Defaults.token) // nil
UserDefaultsStorable
类型
遵循 您可能有自定义类型,并希望它们可以存储在 UserDefaults
中。只需将它们遵循 UserDefaultsStorable
协议,并实现所需的 userDefaultsBridge
属性。
struct Point {
let x: Int, y: Int
}
extension Point: UserDefaultsStorable {
static var userDefaultsBridge: UserDefautsBridge<Point> {
UserDefaultsBridge(
serialization: { point in
return ["x": point.x, "y": point.y]
},
deserialization: { object in
guard
let dict = object as? [String: Int]
let x = dict["x"] as? Int,
let y = dict["y"] as? Int
else { return nil }
return Point(x: x, y: y)
}
}
}
}
如果类型还遵循 Codable
,则已经提供了 userDefaultsBridge
的默认实现。
struct Point: Codable, UserDefaultsStorable {
let x: Int, y: Int
}
enum Defaults {
@UserDefault(key: "point")
static var point: Point?
}
观察
enum Defaults {
@UserDefault(key: "username")
static var username: String = "guest"
}
let observation = Defaults.$username.observe(withOptions: [.old, .new]) { change in
print(change.newValue) // print Optional("guest")
print(change.oldValue) // print Optional("mrfour")
}
let newValueObservation = Defaults.$username.observe { newValue in
print(newValue) // print Optional("mrfour")
}
Defaults.username = "mrfour"
许可证
UserDefaultsStorable 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。