UDPropertyWrapper
这是针对 UserDefaults
的另一个类型安全包装器
示例
import UDPropertyWrapper
struct UserDefaultsStore {
@UserDefault("age", defaultValue: 0)
var age: Int
// If you don't assign any value to `defaultValue`, `nil` will be inserted automatically.
@UserDefault("lastName")
var lastName: String?
}
由于 UDPropertyWrapper
是类型安全的,因此您不能忽略与属性关联的类型来分配 defaultValue
的值。
// ⛔️ Cannot convert value of type 'String' to expected argument type 'Int'
@UserDefault("age", defaultValue: "")
var age: Int
// ⛔️ 'nil' is not compatible with expected argument type 'Int'
@UserDefault("age", defaultValue: nil)
var age: Int
// ⛔️ Referencing initializer 'init(_:)' on 'UserDefault' requires that 'String' conform to ExpressibleByNilLiteral'
@UserDefault("lastName")
var lastName: String
对 UserDefault
进行了一些小的扩展,使您能够绑定枚举值。
enum UDKeys: String {
case userId, countryCode
}
extension UserDefault where T: Codable {
init(_ key: UDKeys, defaultValue: T) {
self.init(key.rawValue, defaultValue: defaultValue)
}
}
extension UserDefault where T: ExpressibleByNilLiteral {
init(_ key: UDKeys) {
self.init(key.rawValue, defaultValue: nil)
}
}
// ✨ Great!
@UserDefault(.userId)
var userId: String
// ✨ Awesome!
@UserDefault(.countryCode)
var countryCode: Int?
要求
- Swift 5.3+
- Xcode12.0+
安装
CocoaPods
pod 'UDPropertyWrapper'
Swift Package Manager
- 选择文件 > Swift 包 > 添加依赖项...
- 在“选择包仓库”对话框中输入 https://github.com/struuuuggle/UDPropertyWrapper。
- 指定一个规则为分支,并将分支字段设置为
main
。