Swift中的访问器方法没有被调用

时间:2014-07-10 00:31:35

标签: properties swift accessor

在Objective-C中,我能够对属性进行以下操作:

@property (nonatomic, strong) Person *currentPerson;

然后intellisense将揭示我可以添加以下方法:

- (void)setCurrentPerson:(Person *)currentPerson {
    ...
}

设置该属性方法后,将调用该方法。

是否有一种在Swift中触发setter方法的等效方法?我注意到没有智能感知,并且在Swift中添加相同的方法永远不会被调用。

func setCurrentPerson(currentPerson: Person) {} // never called

2 个答案:

答案 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的回答使用willSetdidSet属性观察者。