Swift属性观察者在协议扩展?

考虑以下几点:
protocol ViewControllable: class {
  typealias VM: viewmodellable
  var vm: VM! { get }
  func bind()
}

extension ViewControllable {
  var vm: VM! {
    didSet {
      bind()
    }
  }
}

我试图观察vm属性,并在注入时调用bind.但是这不编译错误说:

Extensions may not contain stored properties

这是有道理的,因为协议不能强制要存储或计算的属性.

这是否可以在不引入类继承的情况下完成?

换句话说,我可以观察协议扩展中的属性的更改吗?

不,这是明确禁止的.见 Extension: Computed Properties

Extensions can add new computed properties,but they cannot add stored properties,or add property observers to existing properties.

请记住,如果这是合法的,它会对执行顺序增加一些不平凡的混乱.想象一下,有几个扩展添加了didSet,实际的实现也有一个doSet.他们应该执行什么顺序?这并不意味着它是不可能实现的,但如果我们有这样的话可能会有点令人惊讶.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...