是否有任何理由Apple决定使用AnyClass而不是使用UITableViewCell.Type?

时间:2017-09-21 20:47:28

标签: ios swift uitableview language-design

使用以下代码,您可以将UIViewController.self传递给cellClass

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

并遇到错误。

但如果它写成:

func register(_ cellClass: UITableViewCell.Type?, forCellReuseIdentifier identifier: String)

任何传递都必须是UITableViewCell的子类。它将不再接受UIViewController.self。如果通过它将在编译时抛出一个错误,这是更好的。

那么有什么理由不这样写吗?

我不是在寻找意见,只是想知道如果Apple写出我建议的方式会有任何不足之处,或者是否有任何我不知道的语言限制?

1 个答案:

答案 0 :(得分:1)

UITableView的API来自Objective-C头文件。 Objective-C中的cellClass参数只是Class,Swift等价物为AnyClass。与Swift不同,Objective-C不支持声明ClassAnyClass)的值是任何特定类型。

因此,当为Swift翻译此API时,您将在Swift中使用通用的AnyClass

奇怪的是,文档没有指定传入的类/类型应该是UITableViewCell(或子类)。

在这里讨论了Objective-C中的这个限制(感谢Larme):Specific Class type parameter in Objective-C