Swift中如何实现注解

@propertyWrapper

顾名思义,就是用来包装属性。包装一个属性,使得外界在使用该属性的时候,并无其他不同,但是属性包装器可以对属性的读和写进行监听,比如说,对该属性读和写的过程进行加锁,来保证读写安全

如何实现一个属性包装器

@propertyWrapper
public class Protected<Value> {
    #if os(Linux) || os(Windows)
        let lock = NSLock()
    #else
        let lock = UnfairLock()
    #endif
    
    private var value:Value
    
    public init(_ value:Value) {
        self.value = value
    }
    
    public var wrappedValue:Value { //该方法必须实现,用来获取和设置被包装的属性
        get { lock.around { value } }
        set { lock.around { value = newValue } }
    }
    
    public init(wrappedValue:Value) {//该初始化方法必须实现,被包装的对象会调用该方法来初始化属性包装器
        self.value = wrappedValue
    }
}

使用属性包装器

public class Student {
    var age:Int
    
    @Protected
    var name:String
    
    init(name:String,age:Int) {
        self.age = age
        self.name = name
    }
}

属性包装器的原理

1.实例化一个属性包装器对象通过:init(wrappedValue:Value)
2.在Student 内部创建一个_name的私有变量,当我们在外界调用.name的时候,实际上调用的是_name.wrappedValue

posted @ 2022-06-28 22:53  弄啥来  阅读(680)  评论(1)    收藏  举报