gpt4 book ai didi

properties - 闭包的计算属性

转载 作者:行者123 更新时间:2023-11-30 10:21:28 28 4
gpt4 key购买 nike

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

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

编译器是否可能认为当我打开括号时它一定是闭包定义?

最佳答案

闭包(和函数)在 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 :willSetdidSet

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

关于properties - 闭包的计算属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26369574/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com