属性观察者和属性包装器之间的主要区别是什么?它们似乎非常相似,因为它们管理属性的存储方式。我唯一能想到的是您可以重用属性包装器,因为在管理属性存储方式的代码和定义属性的代码之间存在一层分离。
属性包装器
@propertyWrapper
struct TwelveOrLess {
private var number: Int
init() { self.number = 0 }
var wrappedValue: Int {
get { return number }
set { number = min(newValue, 12) }
}
}
struct Rectangle {
@TwelveOrLess var height: Int
@TwelveOrLess var width: Int
}
物业观察员
struct Rectangle {
var height: Int {
didSet {
if oldValue > 12 {
height = 12
} else {
height = oldValue
}
}
}
var width: Int {
didSet {
if oldValue > 12 {
width = 12
} else {
width = oldValue
}
}
}
}
上面两种情况几乎完成了相同的事情,就是将属性设置为等于或小于 12。