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

Xcode 如何判断Swift类是从另一个类继承的还是符合协议?,xcode,swift,Xcode,Swift,例如,如果我们有一个类Foo,它继承自类Bar,并且符合协议Baz: class Bar {} protocol Baz {} class Foo:Bar,Baz{} 如果我们事先不知道Bar是一个类,而Baz是一个协议(例如,在阅读其他人的代码时),该怎么办。 在这种情况下,可能很清楚,因为在类Foo:之后有多个声明。在Swift中,协议一致性声明必须位于继承子句中的超类声明之后。另一方面,这也可能是一个不具有符合多个协议的继承的类 还有,如果继承子句中只有一个声明呢 class Foo:

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

class Bar {}

protocol Baz {}
class Foo:Bar,Baz{}

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

还有,如果继承子句中只有一个声明呢

class Foo: Bar {}
或:


在Objective-C中,很明显,因为协议名称被尖括号包围。在Swift中,尖括号用于泛型。对于这种情况,是否有语法支持使协议一致性更加直观明确?

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

这是积极的还是消极的,是一个意见问题,有待讨论。因此,我将不谈这个问题

更多关于实际方面: 识别给定关键字是指
协议
还是指
的最快方法是单击选项该关键字。以下是每种情况下的结果:


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

一旦
Baz
开始警告您有未实现的必需方法,而
Bar
就不会有明显的区别吗?我的意思是,在课堂的使用上,没有什么不同,对吧?您要将其作为特定类型的对象进行尝试,并且该特定类型可能是协议。例如,在Objective-C中,For(myArray中的id obj)和For(myArray中的NSObject*obj)之间的差异完全不存在。这一行中的语法看起来不同,但循环中的用法是相同的。为什么它是协议还是类很重要?(也可以右键单击GoToDefination)命名约定如何?协议可以是
BazProtocol
BazDelegate
,这取决于协议的用途,如果您阅读类的头或扩展名,可以快速识别它。此外,只需添加一点,一个类可以符合多个协议,因此
class Foo:Bar,Baz{}
并不保证
Bar
是一个超类,只保证
Baz
是一个协议。你是对的。但这里的要点是,我不认为Bryan在谈论他编写的一个类,它是一个子类/符合他编写的协议。他说的是看一个别人写的项目(或者至少是项目的一个子集),他希望能够很容易地确定这是一个子类还是仅仅符合协议。对于他来说,没有办法回到过去,修复那些糟糕的命名约定,这些约定并不表示以前的开发人员或以前的自己留下的类/协议。
class Foo: Baz {}