1

我在 Swift 中编写了一个简单的属性包装器,并尝试使用Selfself引用属性中的属性包装器结构/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不是指类型Reference<T>。例如,如果我在结构中声明此类属性,然后使用projectedValue

struct Test {
    @Reference var value: Int = 1
}

let t = Test()
let ref = t.$value

该变量ref是 typeTest而不是Reference<T>. 此代码无法编译并导致分段错误,但 Xcode 不会返回任何交互错误。为了使代码按预期工作,我必须像这样声明它:

var projectedValue: Reference<T> { self }

这感觉很奇怪,是不是有意的行为?我检查了 Apple 文档,但没有记录此行为。

4

0 回答 0