例如,如果我们有一个继承自 Bar
类的 Foo
类,并且符合 Baz
协议(protocol):
class Bar {}
protocol Baz {}
Foo 类:Bar、Baz {}
如果我们事先不知道 Bar
是一个类而 Baz
是一个协议(protocol)怎么办(例如,当阅读别人的代码时)。
在这种情况下,由于在 class Foo:
之后有多个声明,它可能很清楚。在 Swift 中,协议(protocol)一致性声明必须在继承子句中的父类(super class)声明之后。另一方面,这也可以是一个符合多种协议(protocol)的没有继承的类。
还有如果继承子句中只有一个声明怎么办?
class Foo: Bar {}
或者:
class Foo: Baz {}
在 Objective-C 中,很清楚,因为协议(protocol)名称被尖括号包围。在 Swift 中,尖括号用于泛型。对于这种情况,是否有语法支持使协议(protocol)一致性在视觉上更加明确?
最佳答案
Swift 处理协议(protocol)的方式与处理类型的方式大体相同。这是设计使然,其后果之一是在许多情况下难以立即区分协议(protocol)一致性和类继承。
这是积极的还是消极的事情是一个见仁见智的问题,有待讨论。因此,我不会解决它。
更多实践方面:
识别给定关键字是指 Protocol
还是 Class
的最快方法是 option-click 关键字。以下是每种情况下这样做的结果:
当然,这只有在您阅读 Xcode 上的代码时才有意义。
关于xcode - 你怎么知道一个 Swift 类是从另一个类继承还是符合协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24575918/