@propertyWrapper struct W0<T> { var wrappedValue: T init(projectedValue: W0<T>) { wrappedValue = projectedValue.wrappedValue } } @propertyWrapper struct W1<T> { var wrappedValue: T } struct S { @W0 var w0: Int @W1 var w1: Int } func main(_ w0: W0<Int>, _ w1: W1<Int>) { S( w0: w0, w1: w1.wrappedValue ) }
init(projectedValue:)
を持つかどうかで、wrapper を受け取るか wrappedValue を受け取るかが変わるんですね。