美文网首页
SwiftUI -- 自定义PropertyWrapper

SwiftUI -- 自定义PropertyWrapper

作者: jancywen | 来源:发表于2021-02-26 15:07 被阅读0次

Property Wrapper 类似其他语言中的注解,它包装修饰属性的 get set 方法,目的在于封装属性操作,简化代码,降低重复书写概率

创建流程

  1. 我们创建了一个 struct 并在其前添加 @propertyWrapper修饰 定义泛型约束
  2. 实现 init 方法,从其参数中获取初始值及其他参数
  3. 实现 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
        }
    }
}

参考:
在Swift中使用属性包装器
Swift @propertyWrapper(属性包装)的使用和本质

相关文章

网友评论

      本文标题:SwiftUI -- 自定义PropertyWrapper

      本文链接:https://www.haomeiwen.com/subject/czeyfltx.html