【问题标题】:Can you explain the output of the following Swift Projected Value?你能解释一下以下 Swift Projected Value 的输出吗?
【发布时间】:2020-03-26 05:52:41
【问题描述】:
@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 reference(Projected Values) 中写道,如果我们将x 的值设置为大于12,那么projectedValue 就会变为true。但是在运行上面的代码后 x.$width 打印错误。删除最后第二行的注释后 x.$width 打印为 true。有人可以解释一下它是如何工作的吗?

【问题讨论】:

    标签: swift5


    【解决方案1】:

    您复制的代码不正确。

    你有

    if num > maximum {
    

    但需要

    if newValue > maximum {
    

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 2010-09-12
      相关资源
      最近更新 更多