使用以下代码,您可以将UIViewController.self
传递给cellClass
func register(_ cellClass: AnyClass?, forCellReuseIdentifier identifier: String)
并遇到错误。
但如果它写成:
func register(_ cellClass: UITableViewCell.Type?, forCellReuseIdentifier identifier: String)
任何传递都必须是UITableViewCell
的子类。它将不再接受UIViewController.self
。如果通过它将在编译时抛出一个错误,这是更好的。
那么有什么理由不这样写吗?
我不是在寻找意见,只是想知道如果Apple写出我建议的方式会有任何不足之处,或者是否有任何我不知道的语言限制?
答案 0 :(得分:1)
UITableView的API来自Objective-C头文件。 Objective-C中的cellClass
参数只是Class
,Swift等价物为AnyClass
。与Swift不同,Objective-C不支持声明Class
(AnyClass
)的值是任何特定类型。
因此,当为Swift翻译此API时,您将在Swift中使用通用的AnyClass
。
奇怪的是,文档没有指定传入的类/类型应该是UITableViewCell
(或子类)。
在这里讨论了Objective-C中的这个限制(感谢Larme):Specific Class type parameter in Objective-C