swift属性包装器 propertyWrapper

2021-01-09  本文已影响0人  追忆之丘

swift属性包装器 propertyWrapper

什么是属性包装器「propertyWrapper」?

我们先定义一个Limit的属性包装器,用来限制dog的height和weight

@propertyWrapper
struct Limit{
    private var number: Int
    private var maximum: Int
    private var minimum: Int
    
    var projectedValue: String{
        return String(describing: "The value: \(self.number)")
    }
    
    var wrappedValue: Int{
        get { return number }
        set {
            if (minimum...maximum).contains(newValue){
                number = newValue
            }else{
                number = minimum
                print("设置的值不合理,系统已经为您更改为默认的最小值")
            }
        }
    }
    
    init() {
        minimum = 0
        maximum = 0
        number = 0
    }
    
    init(minimum: Int, maximum: Int) {
        self.maximum = maximum
        self.minimum = minimum
        self.number = minimum
    }
    
    init(minimum: Int, maximum: Int, number: Int) {
        self.maximum = maximum
        self.minimum = minimum
        self.number = number
        self.wrappedValue = self.number
    }
}

然后去使用这个包装器

struct DogSize{
    @Limit(minimum: 10, maximum: 50) var height: Int
    @Limit(minimum: 0, maximum: 50) var weight: Int
}
struct Dog{
    var size: DogSize
    var name: String
}
let dogSize = DogSize()
var dog = Dog(size: dogSize, name: "tom")
dog.size.height = 500
print(dog.size.$height)
print(dog.size.height)
// 设置的值不合理,系统已经为您更改为默认的最小值
// The value: 10
// 10
上一篇下一篇

猜你喜欢

热点阅读