如何判断 Swift 类是从另一个类继承还是符合协议?

Bry*_*uby 5 xcode swift

例如,如果我们有一个Foo继承自 class 的类Bar,并且符合协议Baz

class Bar {}

protocol Baz {}
Run Code Online (Sandbox Code Playgroud)

class Foo: Bar, Baz {}

如果我们事先不知道这Bar是一个类并且Baz是一个协议(例如,当阅读别人的代码时)怎么办?在这种情况下,由于 后面有多个声明,情况可能会class Foo:很清楚。在 Swift 中,协议一致性声明必须位于继承子句中的超类声明之后。另一方面,这也可能是一个没有继承且符合多个协议的类。

另外,如果继承子句中只有一个声明怎么办?

class Foo: Bar {}
Run Code Online (Sandbox Code Playgroud)

或者:

class Foo: Baz {}
Run Code Online (Sandbox Code Playgroud)

在 Objective-C 中,由于协议名称被尖括号括起来,所以很清楚。在 Swift 中,尖括号用于泛型。对于这种情况,是否有语法支持使协议一致性在视觉上更加明确?

Cez*_*zar 4

Swift 处理协议的方式与处理类型的方式基本相同。这是设计使然,其后果之一是在许多情况下很难立即区分协议一致性和类继承。

这是积极还是消极的事情是一个观点问题,值得讨论。因此,我不会解决这个问题。

更多实用方面:

识别给定关键字是否引用 aProtocol或 a的最快方法Class是按住Option 键单击该关键字。以下是每种情况下这样做的结果:

班级 协议

当然,只有当您在 Xcode 上阅读代码时,这才有意义。