【问题标题】:swift @property directive : custom accessorsswift @property 指令:自定义访问器
【发布时间】:2016-08-21 06:53:24
【问题描述】:

正如我 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()

    }

}

【问题讨论】:

标签: swift ios iphone swift properties


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    回答你的问题的第二部分,到目前为止,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;
    }
    

    希望你能找到解决办法。

    【讨论】:

    • 感谢您的回答。首选哪一个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    相关资源
    最近更新 更多