是否可以实现通过显式值或预定义默认值初始化的属性包装器?这样,举个例子:
@propertyWrapper
struct Wrapper<Value> {
private(set) var value: Value!
private var x: Int
private var y: Int
var wrappedValue: Value {
get { value }
set { value = newValue }
}
init(wrappedValue value: Value,
withX x: Int = 10,
withY y: Int = 20) {
self.x = x
self.y = y
self.wrappedValue = value
}
}
可以通过以下任意一种方式初始化
@Wrapper
var allDefaults = ...
@Wrapper(withX: 30)
var explicitX = ...
@Wrapper(withY: 40)
var explicitY = ...
@Wrapper(withX: 50, withY: 60)
var allExplicit = ...
仅在所有可选参数都已显式初始化的情况下,以上示例才在 swift 5.1 中起作用,如上一个@Wrapper示例。
在任何其他情况下,都会导致error: Abort trap: 6