在设置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,但后来我在每个循环上创建一个数组只是为了提取一个对象。使用任何一种解决方案是否有任何特殊原因,还是仅仅是个人偏好?
答案 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语句来确定哪个部分,然后我用预先存在的数据填充它阵列。