繁体   English   中英

什么是Swift.AnyClass?

[英]What is 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是类型别名AnyObject.Type 这意味着它是一个可以保存任何'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<T> {
   private var array: Swift.Array<T> { ... } 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM