如何在UIViewController属性中使用willSet

时间:2014-07-16 18:23:00

标签: ios swift

我试图用swift和iOS 8玩一点。

问题是,我试图在视图控制器中创建这个setter:

- (void)setViewController:(UIViewController *)viewController
{
    _viewController = viewController;
    method do something
}

以下代码在Objective-C中,所以我想在swift中创建它。

我认为,我应该使用willSet,但我知道如果你有自己的变量时它是如何定义的,如果该属性是ViewController属性,我如何定义willSet方法。

由于

2 个答案:

答案 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中大量使用它的惯例)。