我想使用闭包作为计算属性。我的意思是类似下面的代码。
class MyClass {
typealias myFuncType = () -> (Void)
private var _myAction:myFuncType
var myAction:myFuncType = {
set(newAction){
self._myAction = newAction
}
}
}
编译器是否有可能或者认为当我打开bracked时它必须是闭包定义?
答案 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 Observers:willSet
和didSet