属性包装器可以具有默认参数值吗?

时间:2019-12-02 14:31:44

标签: swift

是否可以实现通过显式值或预定义默认值初始化的属性包装器?这样,举个例子:

@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

1 个答案:

答案 0 :(得分:0)

这是一个已解决的编译器错误:SR-11480