Property Wrapper 类似其他语言中的注解,它包装修饰属性的 get set 方法,目的在于封装属性操作,简化代码,降低重复书写概率
创建流程
- 我们创建了一个 struct 并在其前添加
@propertyWrapper
修饰 定义泛型约束 - 实现
init
方法,从其参数中获取初始值及其他参数 - 实现
wrappedValue
@propertyWrapper
struct UserDefaultsStorage<T: Any> {
var value: T
var initialValue: T
let keypath: String
init(initialValue: T, keypath: String) {
value = UserDefaults.standard.object(forKey: keypath) as? T ?? initialValue
self.keypath = keypath
self.initialValue = initialValue
}
var wrappedValue: T {
set {
value = newValue
UserDefaults.standard.setValue(value, forKey: keypath)
}
get {
value
}
}
}
网友评论