Swift で単純なプロパティ ラッパーをコーディングし、プロパティでプロパティ ラッパー構造体/クラスを使用Self
して参照しようとしました。self
Reference<T>
projectedValue
@propertyWrapper
class Reference<T> {
private var value: T
init(wrappedValue: T) { value = wrappedValue }
var wrappedValue: T {
get { value }
set { value = newValue }
}
var projectedValue: Self { self }
}
しかしSelf
、 type を参照していないようReference<T>
です。たとえば、構造体でそのようなプロパティを宣言してから、次を使用するとしますprojectedValue
。
struct Test {
@Reference var value: Int = 1
}
let t = Test()
let ref = t.$value
変数ref
の型はTest
ではなく ですReference<T>
。このコードはコンパイルされず、セグメンテーション違反が発生しますが、Xcode はインタラクティブ エラーを返しません。コードを期待どおりに機能させるには、次のように宣言する必要があります。
var projectedValue: Reference<T> { self }
これは非常に奇妙に感じます。これは意図した動作ですか? Apple のドキュメントを確認しましたが、この動作は文書化されていません。