我们通常做事喜欢
- (void)setFoo:(Foo *)foo
{
_foo = foo;
// other computation
}
Getter和Setters警告我不能设置我自己的财产。我猜它需要一个计算属性。在Swift中翻译这个成语的最佳方法是什么?
答案 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
}
}