您能否解释以下 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 {