我在 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
不是指类型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 文档,但没有记录此行为。