iOS Swift使用getter和setter还是直接访问?

时间:2016-06-20 10:34:17

标签: ios swift

我是Swift和iOS的新手,我试图弄清楚设置和获取值的推荐方法是什么。我注意到,与Android(我来自哪里)相比,在类的构建中有很多直接访问。那么iOS老手做什么以及为什么呢?是否有某种推荐方法?

2 个答案:

答案 0 :(得分:2)

什么看起来像一个任务实际上是一个setter,看起来像读一个成员实际上是一个吸气剂。该类通常有一个原始的setter,它只能分配或读取值,但可以用你想要的任何代码覆盖它。此外,还有didSet / willSet,类可以添加代码来响应更改。

您永远不会编写看起来的代码,就像您正在调用setter或getter一样,但实际上是在调用它们。

如果您在调用getter或setter时发现执行了大量代码,这对调用者来说是意外的,那么您可以使用函数。

答案 1 :(得分:2)

尽管语法完全相同,但访问Swift属性与访问Java变量不同,当您在Java中公开变量时,就像这样

class MyClass {
    public int val = 123;
}

你无法在以后的某个时间保护它而不会破坏其他人的读写c.val变量的代码。

另一方面,

Swift属性允许您将自定义getter和setter添加到开头看起来像变量的内容:

class MyClass {
    public var val = 123
}

如果您以后决定要设置设置器,可以将其更改为

class MyClass {
    private var _val = 123
    public var val : Int {
        get {
            return _val
        }
        set (newVal) {
            precondition(newVal >= 0, "Negative values are not allowed")
            _val = newVal
        }
    }
}

这是因为当您编写c.val = -321时,Swift执行setter的代码,即看起来像直接访问的实际上是方法调用。