属性包装器
用法
@propertyWrapper
public struct Default<T> {
private var defaultValue: T
var value: T?
public init(_ defaultValue: T) {
self.defaultValue = defaultValue
}
public var wrappedValue: T? {
get { return value ?? defaultValue }
set { value = newValue }
}
}
@propertyWrapper
struct TwelveOrLess {
private var number: Int
// wrappedValue变量的名字是固定的
var wrappedValue: Int {
get { return number }
set { number = min(newValue, 12) }
}
init() {
self.number = 0
}
}
struct SmallRectangle {
@TwelveOrLess var height: Int
@TwelveOrLess var width: Int
}
作用
- 给属性赋一个默认值
- 避免一些重复的代码
原理
在使用了propertyWrapper后,取属性值的时候实际取的是propertyWrapper中的wrappedValue。
网友评论