在 Objective-C 中,我可以对属性执行以下操作:
@property (nonatomic, strong) Person *currentPerson;
然后 intellisense 会显示我可以添加以下方法:
- (void)setCurrentPerson:(Person *)currentPerson {
...
}
设置该属性方法后,将调用该方法。
在 Swift 中是否有等效的方法来触发 setter 方法?我注意到没有智能感知,并且在 Swift 中添加相同的方法永远不会被调用。
func setCurrentPerson(currentPerson: Person) {} // never called
最佳答案
您可以通过使用嵌入到计算属性中的伪私有(private)属性来实现相同的结果,如下所示:
class Test {
var _data: String = ""
var data: String {
get { return self._data}
set { self._data = newValue }
}
}
_data
属性仍然可以公开访问(swift 中没有private
/protected
/private
访问修饰符yet) - 这就是为什么我在它前面加上下划线的原因,以提醒我这是一个伪私有(private)属性。
通过 data
计算属性,您可以使用 getter 和 setter 来覆盖标准行为。
此方法是模仿 objective-c 中的属性的变通方法。 willSet
和 didSet
属性观察器仍然可以按照@gotnull 在他的回答中概述的那样使用。
关于properties - 未调用 Swift 中的访问器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665754/