swift2 在方案扩展中将方法标记为最终

zaqlnxep  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(220)

执行以下操作的含义是什么:

protocol A {
    func f()
}

extension A {
    final f() {}
}

我希望了解在这里的扩展中放置final与不放置final相比有什么作用。我知道final有什么作用,我希望了解实现/不实现f的类及其子类的重写行为。

n3h0vuf2

n3h0vuf22#

对于Swift 2.0:协议扩展
在扩展中添加到类中的方法、属性或子脚本也可以在扩展的定义中标记为final。
参考Inheritance的这个问题,final关键字不允许覆盖扩展中定义的(final)方法,当它被子类化时。
对于Swift 1.2:这在扩展Extensions can add new functionality to a type, but they cannot override existing functionality的上下文中可能很有用
在确定应用程序的架构时,需要在扩展的上下文中考虑以下几点:

  1. Protocol's cannot be extended to Extension
  2. It has go through a Class
  3. Existing functionality cannot be overridden (invalid redeclaration of)
    关于final关键字,这是我的看法,它对扩展方法没有影响,因为与类(继承)相比。如果我错了,请纠正我。演示链接:
  4. Protocol A-->Class B-->Extension B
  5. Protocol A-->Class B-->Extension B, then Class B --> Class C

相关问题