考虑以下几点:
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.他们应该执行什么顺序?这并不意味着它是不可能实现的,但如果我们有这样的话可能会有点令人惊讶.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。