Apple文档和Xcode头文件不完全对应

时间:2017-06-18 13:33:54

标签: ios swift xcode cocoa

环境

XCode:版本8.3.3(8E3004b)

此处提到的Apple文档来自XCode本身,而不是在线文档

描述

从Apple文档中, UITalbeViewController 类与其他类的关系如下图所示。它继承自1个类并符合7个协议(你会发现它符合来自online documents的8个协议[2017年6月18日访问]。

enter image description here

当我通过命令打开XCode头文件时,单击 UITalbeVIewController 字符串,我得到以下结果(请参见下图)。它只显示了2个协议(UITalbeViewDelegate和UIBalbeVIewDataSource)

enter image description here

问题:

为什么头文件没有显示 UITableViewController 符合的其他5个协议?

感谢您的时间和帮助

1 个答案:

答案 0 :(得分:3)

取决于协议,有不同的原因。

扩展中采用了某些协议,因此不会出现在类定义中。以UIStateRestoringNSExtensionRequestHandling协议为例。您会在UIViewController的标题中找到UIViewController在扩展名中采用它们(因此继承也被UITableViewController采用)。

在Swift中导入Objective-C类时,有些编译器会自动生成它们。因此,您不会在标头中看到它们的采用,因为标头只是在Swift中重写的Objective-C标头。 EquatableHashable就属于这种情况。在Objective-C中,所有继承自NSObject的类都具有isEqual(_:)方法和hash属性,因此在Swift中自动采用EquatableHashable协议(但协议并不存在于Objective-C中。

编译器使用一些标记来实现Swift和C或Objective-C之间的桥接。这是CVarArg协议的情况。你可以看到这个协议是空的,所以可以被任何类或结构所采用,但它曾经让编译器知道采用它的类可以安全地用于一些非常具体的C API。