Swift的属性声明语法与C#非常相似:
var foo: Int {
get { return getFoo() }
set { setFoo(newValue) }
}
然而,它也有willSet
和didSet
个动作.分别在调用setter之前和之后调用.考虑到setter中可能只有相同的代码,它们的目的是什么?
Swift的属性声明语法与C#非常相似:
var foo: Int {
get { return getFoo() }
set { setFoo(newValue) }
}
然而,它也有willSet
和didSet
个动作.分别在调用setter之前和之后调用.考虑到setter中可能只有相同的代码,它们的目的是什么?
重点似乎是,有时,您需要一个具有某些行为的属性,例如通知其他对象该属性刚刚更改.如果只有get
/set
,则需要另一个字段来保存该值.使用willSet
和didSet
,可以在修改值时执行操作,而不需要另一个字段.例如,在那个例子中:
class Foo {
var myProperty: Int = 0 {
didSet {
print("The value of myProperty changed from \(oldValue) to \(myProperty)")
}
}
}
myProperty
每次修改时都会打印其新旧值.有了接球手和二传手,我需要这个:
class Foo {
var myPropertyValue: Int = 0
var myProperty: Int {
get { return myPropertyValue }
set {
print("The value of myProperty changed from \(myPropertyValue) to \(newValue)")
myPropertyValue = newValue
}
}
}
因此,willSet
和didSet
代表了几行的经济性,并且字段列表中的噪音更少.