您能否解释以下 Swift 预测值的输出?
Can you explain the output of the following Swift Projected Value?
@propertyWrapper
struct smallNumber {
private var num: Int
private var maximum: Int
var projectedValue: Bool
var wrappedValue: Int {
get { return num }
set {
if num > maximum {
num = maximum
projectedValue = true
}
else {
num = newValue
projectedValue = false
}
}
}
init() {
num = 0
maximum = 12
projectedValue = false
}
init(wrappedValue: Int) {
maximum = 12
projectedValue = false
num = min(wrappedValue, maximum)
}
init(wrappedValue: Int, maximum: Int) {
self.maximum = maximum
projectedValue = false
num = max(wrappedValue, maximum)
}
}
struct Rectangle {
@smallNumber var height: Int
@smallNumber var width: Int
var area: Int {
get {
return height * width
}
}
}
var x = Rectangle()
x.height = 9
x.width = 89
//x.width = 78
print(x.$height, x.$width, x.area)
你好,我正在学习 swift,我在上面的代码中遇到了问题。在 swift reference(Projected Values) 中写道,如果我们将 x 的值设置为大于 12,则 projectedValue 变为 true。但是在 运行 之后上面的代码 x.$width 打印 false。删除倒数第二行的注释后,x.$width 打印为 true。有人可以向我解释一下它是如何工作的吗?
您复制的代码有误。
你有
if num > maximum {
但需要
if newValue > maximum {
@propertyWrapper
struct smallNumber {
private var num: Int
private var maximum: Int
var projectedValue: Bool
var wrappedValue: Int {
get { return num }
set {
if num > maximum {
num = maximum
projectedValue = true
}
else {
num = newValue
projectedValue = false
}
}
}
init() {
num = 0
maximum = 12
projectedValue = false
}
init(wrappedValue: Int) {
maximum = 12
projectedValue = false
num = min(wrappedValue, maximum)
}
init(wrappedValue: Int, maximum: Int) {
self.maximum = maximum
projectedValue = false
num = max(wrappedValue, maximum)
}
}
struct Rectangle {
@smallNumber var height: Int
@smallNumber var width: Int
var area: Int {
get {
return height * width
}
}
}
var x = Rectangle()
x.height = 9
x.width = 89
//x.width = 78
print(x.$height, x.$width, x.area)
你好,我正在学习 swift,我在上面的代码中遇到了问题。在 swift reference(Projected Values) 中写道,如果我们将 x 的值设置为大于 12,则 projectedValue 变为 true。但是在 运行 之后上面的代码 x.$width 打印 false。删除倒数第二行的注释后,x.$width 打印为 true。有人可以向我解释一下它是如何工作的吗?
您复制的代码有误。
你有
if num > maximum {
但需要
if newValue > maximum {