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

标签 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 按照我建议的方式编写是否有任何缺点,或者是否存在我不知道的任何语言限制?

最佳答案

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

因此,当此 API 被翻译成 Swift 时,您将在 Swift 中留下通用的 AnyClass

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

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

关于ios - Apple 是否有任何理由决定使用 AnyClass 而不是使用 UITableViewCell.Type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46352896/

相关文章:

ios - 缩放受约束的 SCNNode

ios - 只允许按一次表格单元格

ios - UITableViewAutomaticDimension 无法与副标题 UITableViewCells 一起正常工作

iOS REST 调用和缓存策略

ios - 检查用户名是否已经存在的 : Swift, Firebase

objective-c - 如何修复 QuickDialog 项目中的这个构建错误?

ios - 如何从我们的应用程序在 WhatsApp 中打开特定联系人的聊天屏幕?

arrays - 如何使用具有多个子类别的 TableView Controller

ios - MBProgressHud View 自定义在 Swift 3 中不起作用并且不显示?

ios - 崩溃日志 - 需要帮助才能找到崩溃