在这个简化的示例中,我创建了 UInt 的 propertyWrapper 来保存自然数(整数 > 0)。我自己的示例使用了更复杂的过滤器,但这说明了问题。问题的重点不是找到解决方法,而是阐明(对我而言)令人困惑的错误。
将它分配给一个简单的 UInt 会带来列出的错误消息。
在下面的行中使用它的 WrappedValue 属性可以正常工作。但可以肯定的是,包装的全部意义在于能够将其视为 get 返回的 UInt 吗?
错误“无法将类型 'NonZero' 的值分配给类型 'UInt”似乎破坏了包装器类型的全部要点。我有什么误解?Xcode 11.0
import Foundation
@propertyWrapper
struct NonZero {
private let myNumber : UInt
init(n : UInt)
{
if ( n == 0){fatalError(" cannot be 0")}
myNumber = n
}
var wrappedValue: UInt {
get { return myNumber }
}
}
struct Nums {
var num :UInt
init( nz: NonZero){
num = nz //error message "cannot assign value of type 'NonZero' to type 'UInt"
num = nz.wrappedValue //no error
}
}