为UITableViewCell选择字符串 - 数组还是switch语句?

时间:2009-10-24 21:32:48

标签: iphone cocoa-touch uitableview

在设置UITableView的数据源时,我有兴趣了解哪个更好,解决方案A:

NSString *labelText;

switch (indexPath.row) {
    case 0:
        labelText = @"Setup New Match";
        break;
    case 1:
        labelText = @"Teams";
        break;
    case 2:
        labelText = @"Players";
        break;
    case 3:
        labelText = @"Archive";
        break;
}

cell.textLabel.text = labelText;

或解决方案B?

NSArray *labels = [NSArray arrayWithObjects:@"String 1", @"String 2", @"String 3", @"String 4", nil];

cell.textLabel.text = [labels objectAtIndex:indexPath.row];

我的DRY粉丝倾向于解决方案B,但后来我在每个循环上创建一个数组只是为了提取一个对象。使用任何一种解决方案是否有任何特殊原因,还是仅仅是个人偏好?

3 个答案:

答案 0 :(得分:2)

当我这样做时,我使用switch语句。但是,如果你想使用数组方法而不是每次都创建一个数组,你可以使用静态C数组或其他东西:

static NSString * const labels[] = {@"String 1", @"String 2", @"String 3", @"String 4"};

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    //Get the cell in the normal way.  No array stuff here
    //...
    cell.textLabel.text = labels[indexPath.row];
}

答案 1 :(得分:1)

如果您喜欢坚持使用解决方案B,那么您可以使标签数组保持静态,这样可以消除每次创建数组的开销。

就哪一个更好而言,尽管B在这个简单的情况下肯定是最优雅的,但它也是最不灵活的。想象一下你为每个单元格进行更改以放置不同图像的情况,选项A使这种变化更加清晰和可维护。

答案 2 :(得分:1)

我更喜欢解决方案A.

除非您的阵列是预先退出的,否则我不会使用B.那就是说,我正在开发一个带有部分的应用程序,并使用switch语句来确定哪个部分,然后我用预先存在的数据填充它阵列。