我已经在标准库中看到了诸如some operators for FloatingPoint
(full source code)之类的奇怪事物。
protocol Foo: Bar {
override static func baz()
}
我知道在重写某些超类的open方法时这是必需的...但是我从不需要在协议中这样做,也不知道这意味着什么。
答案 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
修饰符是编译时错误。