如何在Swift中表达这个setter模式?

时间:2014-11-08 15:39:50

标签: objective-c cocoa swift

我们通常做事喜欢

- (void)setFoo:(Foo *)foo
{
    _foo = foo;

// other computation

}

Getter和Setters警告我不能设置我自己的财产。我猜它需要一个计算属性。在Swift中翻译这个成语的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以使用存储的私有变量“隐藏”公共计算变量,如下所示:

private var _foo : Foo!
var foo : Foo {
    get {
        return _foo
    }
    set (newfoo) {
        _foo = newfoo
    }
}

这与Objective-C @synthesize的作用相似。但是你也应该问问自己是否真的需要这个。在大多数情况下,你没有。

答案 1 :(得分:0)

如果您正在进行与设置foo的内部存储紧密集成的计算,特别是如果设置存储是以这种计算为条件的,则计算属性/存储属性对@matt建议可能你需要的解决方案。

否则 - 如果您需要无条件地响应设置属性而进行工作 - 您正在寻找的是Swift的property observers功能。

var foo: Foo {
willSet(newFoo) {
    // do work that happens before the internal storage changes
    // use 'newFoo' to reference the value to be stored
}
didSet {
     // do work that happens after the internal storage changes
    // use 'oldValue' to reference the value from before the change
}
}