Как заменить массивный оператор if в Objective C - PullRequest
0 голосов
/ 20 февраля 2012

В данный момент у меня есть массивное выражение типа if

    if ([dicIdentifer isEqualToString:CONF_KEY_CALLMETHOD]) {
    switch ([[settingDictionary objectForKey:PLIST_VALUE] intValue]) {
        case CASE_1:
            cell.detailTextLabel.text = SOME_TEXT_1
            break;
        case CASE_2:
            cell.detailTextLabel.text = SOME_TEXT_2
            break;
        case CASE_3:
            cell.detailTextLabel.text = SOME_TEXT_3
            break;
        case CASE_4:
            cell.detailTextLabel.text = SOME_TEXT_4
            break;
        default:
            break;
    }
} else if ([dicIdentifer isEqualToString:CONF_KEY_HTTPMETHOD]) {
    switch ([[settingDictionary objectForKey:PLIST_VALUE] intValue]) {
        case CASE_1:
            cell.detailTextLabel.text = SOME_TEXT_1
            break;
        case CASE_2:
            cell.detailTextLabel.text = SOME_TEXT_2
            break;
        case CASE_3:
            cell.detailTextLabel.text = SOME_TEXT_3
            break;
        case CASE_4:
            cell.detailTextLabel.text = SOME_TEXT_4
            break;
        default:
            break;
    }
} .....

У меня сейчас есть еще десять таких утверждений типа "если", и это число, вероятно, увеличится. Это работает довольно хорошо, но с точки зрения обслуживания и эффективности, я думаю, это можно улучшить. Я прочитал ветку от Способы замены массивного оператора if альтернативной конструкцией в Objective-C . Но, похоже, не подходит для моего случая. Если у кого-нибудь будет предложение по моему делу.

Спасибо

1 Ответ

1 голос
/ 20 февраля 2012

Метод в вопросе, который вы связали, идеально подходит здесь. Вам просто нужны два уровня словарей:

NSDictionary *dictionaryForCallMethod = [NSDictionary dictionaryWithObjectsAndKeys:SOME_TEXT_1, [NSNumber numberWithInt:CASE_1], SOME_TEXT_2, [NSNumber numberWithInt:CASE_2], SOME_TEXT_3, [NSNumber numberWithInt:CASE_3], SOME_TEXT_4, [NSNumber numberWithInt:CASE_4], nil];
NSDictionary *dictionaryForHTTPMethod = [NSDictionary dictionaryWithObjectsAndKeys:SOME_TEXT_1, [NSNumber numberWithInt:CASE_1], SOME_TEXT_2, [NSNumber numberWithInt:CASE_2], SOME_TEXT_3, [NSNumber numberWithInt:CASE_3], SOME_TEXT_4, [NSNumber numberWithInt:CASE_4], nil];
// create additional dictionaries for each branch of your if statement

NSDictionary *bigDictionary = [NSDictionary dictionaryWithObjectsAndKeys:dictionaryForCallMethod, CONF_KEY_CALLMETHOD, dictionaryForHTTPMethod, CONF_KEY_HTTPMETHOD, nil];
// put the other dictionaries in this dictionary as well

cell.detailTextLabel.text = [[bigDictionary objectForKey:dicIdentifier] objectForKey:PLIST_VALUE];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...