将方法标记为协议扩展中的最终方法

时间:2015-09-13 02:13:34

标签: swift swift2

执行以下操作会产生什么影响:

protocol A {
    func f()
}

extension A {
    final f() {}
}

我希望了解将final放在此处的扩展程序与未放置时相比。我知道final做了什么,我希望了解实现/不实现f及其子类的类的覆盖行为。

2 个答案:

答案 0 :(得分:2)

您无法再将扩展功能标记为最终功能。

https://bugs.swift.org/browse/SR-1762

答案 1 :(得分:1)

对于Swift 2.0:Protocol Extensions

Methods, properties, or subscripts that you add to a class in an extension can also be marked as final within the extension’s definition.

参考Inheritance的这个问题,final关键字不允许覆盖Extension中定义的(最终)方法,当它被分类时。

对于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)
  4. 关于final关键字,这是我认为与类(继承)相比,它对Extensions方法没有影响。如果我在这里错了,请纠正我。 演示链接:

    1. Protocol A-->Class B-->Extension B
    2. Protocol A-->Class B-->Extension B, then Class B --> Class C