Альтернатива для переключения заявления в цель C - PullRequest
1 голос
/ 09 ноября 2011

Я делаю проект, в котором я загружаю табличное представление с данными JSON из асинхронного соединения. Я использую оператор switch для загрузки каждой строки, например:

dictionaryData = [responseString JSONValue]; 
switch (indexPath.row) 
{ 
    case 0: 
    { 
        NSString *name = [NSString stringWithFormat:@"%@ : %@ %@",@"Name",[dictionaryData      valueForKey:@"firstName"],[dictionaryData valueForKey:@"lastName"]]; 
        cell.textLabel.text = name;
        break; 
    }
    case 1: 
    { 
        NSString *email = [NSString stringWithFormat:@"%@ : %@",@"Email",[dictionaryData   valueForKey:@"email"]]; 
        cell.textLabel.text = email; } 
        break;

Есть 8 строк, и мне нужно написать 8 вариантов переключения, что, я думаю, делает мой метод слишком длинным. Может кто-нибудь сказать мне, что есть ли альтернатива для переключения операторов.

Ответы [ 3 ]

3 голосов
/ 09 ноября 2011

Замените ваш переключатель массивом.Каждый индекс в массиве будет соответствовать одному из первых case s.Массив должен быть настроен с ключами, которые вам нужны

keyArray = [NSArray arrayWithObjects:@"Name", @"Email", ..., nil];

dictionaryData = [responseString JSONValue];

NSString * rowKey = [keyArray objectAtIndex:[indexPath row]];
[[cell textLabel] setText:[dictionaryData objectForKey:rowKey]];
1 голос
/ 09 ноября 2011

В некоторых случаях лучшим вариантом будет объект .

Обновление

Я подробно рассказал о том, как можно подойти к этому (слишком сильно) здесь: Какие альтернативы оператору switch я могу использовать для обновления моих UITableViewCells?

1 голос
/ 09 ноября 2011

Альтернативой switch является использование серии операторов if / else, которые не сокращают код. Если ваш метод слишком длинный или слишком сложный, переместите тело каждого случая в его собственный метод, а затем просто вызовите этот метод из соответствующего ему случая.

...