什么是Swift.AnyClass?

我正在研究UITableView类,我发现:

 open func register(_ cellClass: Swift.AnyClass?, forCellReuseIdentifier identifier: String) 

在这里阅读我知道AnyClass是一个类型。

 typealias AnyClass = AnyObject.Type 

我不明白的是: Swift.AnyClass Swift做什么?

我已经知道它所采用的参数类似于CustomTableViewCell.self

只是为了清除这一点,正如有人已经说过的, Swift是运行时的虚拟模块的名称,该语言中定义的每个对象,类型和内置也可以从该命名空间访问。

在这种情况下,为什么类型被声明为Swift.AnyClass而不是简单的AnyClass

我不认为这次要求避免与UITableView范围中定义的某些类型发生名称冲突。 这可能与UIKit仍然用Objective-C编写的事实有关。

他们可能实现了一种“解决方法”,在该函数原型中使用外观更好的AnyClass类型,在Swift运行时中定义的内容通常不会在Objective-C中作为全局typedef使用。

我的猜测是他们在UIKit中手动导入Swift模块(或者只有一些定义的较小的模型模块),你看到的就是结果。

更多信息可以添加到已接受的答案中:

首先, Swift.AnyClassSwift.AnyClass的类型别名。 这意味着它是一个可以保存任何’classtype’的元类型,因此首先命名为AnyClass

 class A {} class B {} var anyClass: AnyClass? = nil /* could be ': AnyObject.Type' */ anyClass = A.self anyClass = B.self var anyInstanceOfAClass: AnyObject? = nil anyInstanceOfAClass = A() anyInstanceOfAClass = B() 

Swift是标准库的实际模块名称。 如果您需要一种消除歧义的方法,您可以自己使用它。 对于Instance,您可以执行以下操作:

 struct Array { private var array: Swift.Array { ... } }