为什么 UITableViewCell textLabel 属性 是可选的?

Why is a UITableViewCell textLabel property optional?

一个UITableViewCelldetailTextLabelshould be optional, which is documented,但是为什么textLabel属性是可选的?

虽然没有正确记录,但它遵循相同的规则 - 必须设置正确的样式。也就是说,如果您使用自定义单元格——通常通过界面构建​​器配置,自定义单元格被初始化——在这种情况下,默认视图的 none 被添加到单元格,因为这会很浪费。

如果您使用自定义单元格以外的任何其他样式,它将始终初始化第一个标签,因此您可以放心使用它(但在这种情况下显然不能更改定义,因此它将始终声明为可选)。

简答:为了节省资源。 textLabel 属性 是可选的,以允许延迟初始化 UILabel。换句话说,除非您实际尝试访问它,否则 属性 保持为零。

您可以通过检查 UITableViewCell 的实例在调试器中验证这一点:

let cell = dequeueReusableCellWithIdentifier(MyCell.cellIdentifier, forIndexPath: indexPath) as! MyCell

// check cell.textLabel here in the debugger. should be nil.

cell.textLabel.text = "test"   // creates textLabel via lazy initialization