为什么这个TableView代码有效?

时间:2010-05-03 17:07:18

标签: iphone objective-c uitableview

我在使用以下代码创建UITableViewCell时输了一个拼写错误:

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CellIdentifier";
    UITableViewCell *cell = [self.tableView
        dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSLog(@"Creating cell");
        cell = [[[UITableViewCell alloc] 
            initWithStyle:UITableViewStylePlain
            reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.textLabel.text = @"Hello";
    return cell;
}

错字正在使用UITableViewStylePlain而不是UITableViewCellStyleDefault。代码工作正常,创建新单元格。为什么呢?

3 个答案:

答案 0 :(得分:10)

这就是定义这些变量的方式。

typedef enum {
   UITableViewCellStyleDefault,
   UITableViewCellStyleValue1,
   UITableViewCellStyleValue2,
   UITableViewCellStyleSubtitle
} UITableViewCellStyle;

typedef enum {
   UITableViewStylePlain,
   UITableViewStyleGrouped
} UITableViewStyle;

UITableViewCellStyleDefaultUITableViewStylePlain都评为0,因此它们可以互换。

答案 1 :(得分:3)

因为UITableViewStylePlain被声明为:

typedef enum {
    UITableViewStylePlain, 
    UITableViewStyleGrouped
} UITableViewStyle;

UITableViewCellStyleDefault被声明为:

typedef enum {
    UITableViewCellStyleDefault,
    UITableViewCellStyleValue1,
    UITableViewCellStyleValue2,
    UITableViewCellStyleSubtitle
} UITableViewCellStyle; 

在这两种情况下,您所谈论的值是enum中的第一个,这意味着它们都将编译为0。因此,它们是“可互换的”(尽管你肯定依赖于生产代码中的这种行为)。

答案 2 :(得分:1)

UITableViewStylePlainUITableViewCellStyleDefault都是具有整数值的常量。当你使用其中一个时,你实际上并没有将常量传递给方法,而是传递常量的值。

如其他答案中所述,两个常量都具有相同的整数值,因此initWithStyle:reuseIdentifier将收到它可以使用的样式ID,它甚至没有注意到你提供了一个没有的常量与此方法有关。