swift @property指令:自定义访问器

时间:2016-04-27 06:28:27

标签: ios iphone swift properties

当我referred here,时,swift中没有@property或@synthesise指令。

然后,

1]如何通过编译器添加setter和getter?

2]如果我有一个对象,如何编写我们自己的setter和getter方法?

我是的新手。任何人都可以用例子解释吗?

//编辑:

在进行投票之前,请让我按照Apple documentation.

进行展示

@property (getter=isFinished) BOOL finished;将覆盖getter方法。

以同样的方式我如何在Swift中实现?

在下面的示例中,如何将getter设为isFinished

class CarPaint : NSObject {

    var finished:Bool = Bool();

    func getCarDoorColor() -> UIColor {

        if finished { //instead here I want to `isFinished`
            return UIColor.whiteColor()
        }

        return UIColor.brownColor()

    }

}

2 个答案:

答案 0 :(得分:3)

您可以像这样更改Swift中属性的访问方式:

private var _someInt: Int = 0
var someInt: Int {
    get {
        return _someInt
    }
    set(newValue) {
        _someInt = newValue
    }
}

在这个例子中,我们使用私有变量来存储我们的值,并使用get / set闭包来访问该变量。因此,这不是非常有用,但在其他情况下它可能很有用,例如,如果您想要访问另一个对象的变量,就好像它是该属性的属性一样。

答案 1 :(得分:0)

回答问题的第二部分,到目前为止,Swift中没有任何名字的getter。

@property (getter=isFinished) BOOL finished;

Apple在其migration documentation

中建议使用Swift中的上述Objective-C等效代码
var _finished:Bool = false // finished boolean variable.

var finished:Bool { //Getter(custom) and Setter for finished variable.

    @objc(isFinished) get {
        return self._finished
    }
    set(newValue){
        _finished = newValue
    }
}

只有办法解决getter self.isFinished()

func isFinished() ->  Bool {
    return _finished;
}

我希望你能得到解决方案。