如何覆盖SWIFT中存储属性的设置器?
在Obj-C中,我可以覆盖其setter,但Swift似乎对将getter/setter用于存储属性并不满意.
假设我有一个Card
类,它有一个名为rank
的属性.我不希望客户机给它任何无效值,因此,在Objective-C中,我可以覆盖setRank
,以便它执行额外的判断.但是SWIFT中的willSet
似乎没有帮助,因为newValue
是常量,赋值rank
没有意义,因为setter将在循环中调用.
如何覆盖SWIFT中存储属性的设置器?
在Obj-C中,我可以覆盖其setter,但Swift似乎对将getter/setter用于存储属性并不满意.
假设我有一个Card
类,它有一个名为rank
的属性.我不希望客户机给它任何无效值,因此,在Objective-C中,我可以覆盖setRank
,以便它执行额外的判断.但是SWIFT中的willSet
似乎没有帮助,因为newValue
是常量,赋值rank
没有意义,因为setter将在循环中调用.
好的.阅读有关SWIFT的苹果文档时,我发现有this个:
如果为其自身didSet观察器中的属性赋值, 您分配的新值将替换刚刚设置的值.
所以你要做的就是:
var rank: Int = 0 {
didSet {
// Say 1000 is not good for you and 999 is the maximum you want to be stored there
if rank >= 1000 {
rank = 999
}
}
}