协议中的“覆盖”是什么意思?

时间:2019-08-06 23:38:40

标签: swift overriding swift-protocols

我已经在标准库中看到了诸如some operators for FloatingPointfull source code)之类的奇怪事物。

protocol Foo: Bar {
    override static func baz()
}

我知道在重写某些超类的open方法时这是必需的...但是我从不需要在协议中这样做,也不知道这意味着什么。

1 个答案:

答案 0 :(得分:1)

这意味着协议声明了一个新成员,该成员将替换父协议中的相同成员,尽管这与“ shadowing”不同(因此它与C#的new方法修饰符并不完全相同)关键字,Swift也支持static协议,而C#interface则无法做到)。

在您为public protocol FloatingPoint提供的链接中,我们看到FloatingPoint实现了SignedNumeric

FloatingPoint声明了override mutating func negate(),但声明了SignedNumeric,因此需要添加override

Swift语言5.1官方参考在类上声明了override关键字(但没有明确规定协议),但是本节的序言暗示它适用于协议,只要它适用于 all < / em>声明:

  

https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID473

     

重写超类方法的方法必须用override声明修饰符标记。覆盖没有override修饰符的方法或在不覆盖超类方法的方法上使用override修饰符是编译时错误。