在Objective-C中,我能够对属性进行以下操作:
@property (nonatomic, strong) Person *currentPerson;
然后intellisense将揭示我可以添加以下方法:
- (void)setCurrentPerson:(Person *)currentPerson {
...
}
设置该属性方法后,将调用该方法。
是否有一种在Swift中触发setter方法的等效方法?我注意到没有智能感知,并且在Swift中添加相同的方法永远不会被调用。
func setCurrentPerson(currentPerson: Person) {} // never called
答案 0 :(得分:2)
正如Swift Properties指南中所定义:
var currentPerson: Person? {
willSet(currentPerson) {
// ...
}
didSet {
// ...
}
}
答案 1 :(得分:2)
通过使用嵌入到计算属性中的伪私有属性,可以获得相同的结果,如下所示:
class Test {
var _data: String = ""
var data: String {
get { return self._data}
set { self._data = newValue }
}
}
_data
媒体资源仍然可以公开访问(尚未获得private
/ protected
/ private
访问修饰符) - 这就是' s我之所以用下划线作为前缀,是为了提醒我这是一个伪私有财产。
使用data
计算属性,您可以使用getter和setter来覆盖标准行为。
此方法是在目标c中模仿属性的变通方法。仍然可以按照@gotnull的回答使用willSet
和didSet
属性观察者。