什么是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.AnyClass
是Swift.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 { ... } }