请解释这种设置细胞附件的奇怪方法

时间:2010-12-07 21:45:54

标签: iphone accessorytype

在Google搜索here的答案时,我看到以下代码行another question of mine

cell.accessoryType = (UITableViewCellAccessoryNone + UITableViewCellAccessoryCheckmark) - cell.accessoryType;

从该线程看,代码可以正常工作。我只是想知道,那个代码不是多余的吗?如果您知道accessoryType,为什么要从该表达式中减去它?

2 个答案:

答案 0 :(得分:4)

如果accessoryType是UITableViewCellAccessoryNone,那么表达式的网络将把它设置为UITableViewCellAccessoryCheckmark。

如果accessoryType是UITableViewCellAccessoryCheckmark,则表达式的网络将其设置为UITableViewCellAccessoryNone。

这只是说

的捷径
if (cell.accessoryType == UITableViewCellAccessoryNone)
    cell.accessoryType = UITableViewCellAccessoryCheckmark
else if (cell.accessoryType == UITableViewCellAccessoryCheckmark)
    cell.accessoryType = UITableViewCellAccessoryNone

绝对是混淆代码的一个例子......我会避免它。

答案 1 :(得分:1)

鉴于此代码在UITableViewCellAccessoryCheckmarkUITableViewCellAccessoryNone之间切换并且试图简洁,另一种替代方案 - 我发现更清楚 - 将是:

cell.accessoryType ^= UITableViewCellAccessoryCheckmark|UITableViewCellAccessoryNone;

这个陈述的意图更清楚,并且不需要条件语句 - 根据调用的频率,这可能会有用也可能没用。