Typecast与否

时间:2014-01-02 19:03:24

标签: ios

我有一个名为UITableViewCell的{​​{1}}子类。在MyCustomCell代表的didSelectRowAtIndexPath:方法中,我有这个:

UITableView

该行提示来自Xcode的警告:不兼容的类型使用“UITableViewCell *”类型的表达式初始化“MyCustomCell *”

如果我将其更改为以下行,则警告消失。但是这两行都适合我。

MyCustomCell *cell = [tableView cellForRowAtIndexPath:indexPath];

我应该完全应用类型转换吗?

修改详情:

MyCustomCell *cell = (MyCustomCell *)[tableView cellForRowAtIndexPath:indexPath]; 方法中,我使用cellForRowAtIndexPath:来创建这些单元格。日志告诉我单元格确实来自MyCustomCell

MyCustomCell

登录NSLog(@"cellForRowAtIndexPath cell:%@", cell); 也确认didSelectRowAtIndexPath:UITableView返回给我:

MyCustomCell

对我来说,waring只是因为Xcode无法预先知道细胞是如何创建的。由于从NSLog(@"didSelectRowAtIndexPath cell: %@", [tableView cellForRowAtIndexPath:indexPath]); 返回的单元格已经[tableView cellForRowAtIndexPath:indexPath],因此它们是兼容的。

1 个答案:

答案 0 :(得分:3)

是的,你应该施展。由于cellForRowAtIndexPath:返回的UITableViewCell *不是MyCustomCell *,因此您在分配中有两种不兼容的类型,这是非法的(至少就C标准而言)。