1

Swift で単純なプロパティ ラッパーをコーディングし、プロパティでプロパティ ラッパー構造体/クラスを使用Selfして参照しようとしました。selfReference<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 のドキュメントを確認しましたが、この動作は文書化されていません。

4

0 に答える 0