【发布时间】: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