我试图用swift和iOS 8玩一点。
问题是,我试图在视图控制器中创建这个setter:
- (void)setViewController:(UIViewController *)viewController
{
_viewController = viewController;
method do something
}
以下代码在Objective-C中,所以我想在swift中创建它。
我认为,我应该使用willSet,但我知道如果你有自己的变量时它是如何定义的,如果该属性是ViewController属性,我如何定义willSet方法。
由于
答案 0 :(得分:1)
这样的事情:
var viewController: UIViewController? {
willSet {
//method to do something
}
}
如果在方法调用中需要,可以实际访问viewController将使用变量“newValue”设置的内容。
注意:我在这里使属性可选,只是为了摆脱有关需要初始化的编译器警告
答案 1 :(得分:-1)
与@ Eric的答案不同的另一种方法是使用计算属性,它更接近地模仿objective-c属性,包括定义伪私有数据成员和实现getter和setter的计算属性:
class MyClass {
var _viewController: UIViewController?
var viewController : UIViewController? {
get {
return self._viewController
}
set {
self._viewController = newValue
// Do something else
}
}
}
我定义了属性伪私有,因为swift没有访问修饰符(还),所以一切都是公共的 - 但是当我看到一个下划线为变量或属性名添加前缀时,那对我来说意味着私人(这是我在javascript中大量使用它的惯例)。