首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“过载”在协议中意味着什么?

“过载”在协议中意味着什么?
EN

Stack Overflow用户
提问于 2019-08-06 23:38:40
回答 1查看 282关注 0票数 3

我在标准库中看到了一些奇怪的东西,比如一些 运算符 FloatingPoint (全源代码)。

代码语言:javascript
复制
protocol Foo: Bar {
    override static func baz()
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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修饰符是编译时错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57385250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档