Idiomatic Swift:Getter&塞特锅炉板编码

时间:2015-05-26 06:05:56

标签: swift getter-setter boilerplate

在将一些项目从Objective-C迁移到Swift时,我发现自己用更多的样板代码替换@property / @synthesize语法。

例如,对于我正在实施的每个@property,我目前使用此模式:

var foo: Foo? {
    get {
        return _foo
    }
    set {
        _foo = newValue
    }
}

var _foo: Foo?

最终快速添加。将其与Objective-C中的2行进行比较。这感觉不对。

我是否应该使用_foo在我的移植类中使用foo替换代码,并完全跳过接口后面的每个public var的抽象?

1 个答案:

答案 0 :(得分:2)

正如@ Amit89指出的那样,你可以简单地使用_foo 在您的示例中,添加foo完全没有做任何事情,因为您只是重新创建了get已提供的set_foo功能。

如果要控制_foo的设置方式,可以使用属性观察器:

var _foo: Foo? {
    didSet { }
    willSet { }
}

如果您想控制_foo的检索方式,那么创建private_foo,然后通过计算属性访问它确实有意义:

private var _foo: Foo?

var foo: Foo? {
    get { 
        // return `_foo` in some special way
    }

    // add a setter if you want to set `_foo` in some special way
}