我在标准库中看到了一些奇怪的东西,比如一些 运算符 为 FloatingPoint (全源代码)。
protocol Foo: Bar {
override static func baz()
}我知道当重写超类的开放方法时,这是必要的.但我从来不需要在协议中这样做,我也不知道这意味着什么。
发布于 2019-08-06 23:54:54
这意味着该协议声明了一个新成员,该成员替换了父协议中相同的成员,尽管这与“隐藏”不是一回事(因此它不完全像C#的new方法-修饰符关键字,Swift也支持static协议,这是C#s interface所不能做的)。
在您为public protocol FloatingPoint提供的链接中,我们看到FloatingPoint实现了SignedNumeric。
FloatingPoint声明了override mutating func negate() --但SignedNumeric也声明了--因此需要添加override。
官方的Swift语言5.1引用就类上的override关键字(但不是显式协议)指出了这一点,但本节的序言意味着它适用于适用于所有声明的协议:
https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID473 重写超类方法的方法必须用
override声明修饰符标记。在没有override修饰符的情况下重写方法或在不覆盖超类方法的方法上使用override修饰符是编译时错误。
https://stackoverflow.com/questions/57385250
复制相似问题