加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 初始声明后可以添加属性观察者吗?

发布时间:2020-12-14 05:01:24 所属栏目:百科 来源:网络整理
导读:例如,我想在类实例上调用一个方法,将一个willSet添加到属性中.我不想在属性的声明中指定willSet,因为我需要在观察者中添加条件逻辑,并且对于没有调用此方法的每个其他实例,它将被不必要地运行. 像这样的东西: var someProperty: Intfunc someMethod() { som
例如,我想在类实例上调用一个方法,将一个willSet添加到属性中.我不想在属性的声明中指定willSet,因为我需要在观察者中添加条件逻辑,并且对于没有调用此方法的每个其他实例,它将被不必要地运行.

像这样的东西:

var someProperty: Int

func someMethod() {
    someProperty {  // this is the syntax/ability I'm unsure about
        willSet { ...add some behavior... }
    }

    ...more stuff...
}

解决方法

可以将观察者添加到超类中声明的属性,但不能添加到同一个类或类扩展中.您不能在函数中的两个位置声明相同的属性.我能想到的最好的解决方案就是这样,你在willSet中有一个可选的闭包,你只需要在想要观察行为时为该属性赋值.

也许是这样的:

private var _willSetCallback: ((Int) -> (Bool))?
var someProperty: Int {
    willSet {
        if let optionalBool = _willSetCallback?(newValue) {
             // do something
        }
    }
}

func someMethod() {
    self._willSetCallback = { newValue in
    return newValue > 0
    }
}

它不是特别优雅,但它可能或多或少地处理你想要的行为?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读