封闭的计算属性

时间:2014-10-14 20:19:25

标签: properties swift closures

我想使用闭包作为计算属性。我的意思是类似下面的代码。

class MyClass {
    typealias myFuncType = () -> (Void)
    private var _myAction:myFuncType
    var myAction:myFuncType = {
    set(newAction){
        self._myAction = newAction
       }
    }
}

编译器是否有可能或者认为当我打开bracked时它必须是闭包定义?

1 个答案:

答案 0 :(得分:1)

闭包(和函数)在swift中被宣传为一等公民,因此您可以将它们存储在变量和属性中,就像任何其他数据类型一样。

那就是说,你的代码几乎是好的,你只需删除'=',否则它被认为是带内联初始化的存储属性。正确的代码是:

var myAction:myFuncType {
    set(newAction) {
        self._myAction = newAction
    }
    get { // see notes below
        return _myAction
    }
}

一些注意事项:

  • 不需要使用由存储属性支持的计算属性 - 您的代码等同于:

    class MyClass {
        typealias myFuncType = () -> (Void)
    
        var myAction: myFuncType
    }
    
  • 如果您在设置媒体资源时需要进行额外处理,请使用Property ObserverswillSetdidSet

  • 在计算属性中,如果实现了setter,则还必须提供getter
相关问题