Avatar
omochimetaru 3/6/2025 6:35 AM
@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 ) }
6:35 AM
Swiftの自動実装initって、そのプロパティが property wrapper だった時、それが init(projectedValue:) を持つかどうかで、wrapper を受け取るか wrappedValue を受け取るかが変わるんですね。
6:36 AM
そして、Xcodeが自動実装してくれるrefactor > generate memberwise initはこの挙動に従っていない
6:37 AM
memberwise initのマクロ生成もダメそう 調べたら、特別な対応をユーザーがする必要があるようだ https://github.com/gohanlon/swift-memberwise-init-macro?tab=readme-ov-file#support-for-property-wrappers
6:39 AM
あと、SwiftUI.Environment は、この projectedValue: の挙動をするんだけど
6:39 AM
initが見当たらなくてなぜそうなるのかわからない