Obj-C Switch Заявление целочисленной переменной iPhone - PullRequest
0 голосов
/ 28 февраля 2011

Я пытаюсь использовать оператор switch, чтобы прочитать, какая кнопка была нажата в UIActionSheet (программирование для iPhone).

В моем FirstViewController.m есть следующее:

    - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    int countarray=[areaselectArray count]; 
    switch (buttonIndex) {
        case countarray: //cancel button has been pressed
            //do stuff
            break;
        default:
            area = [areaselectArray objectAtIndex:(buttonIndex)];
            [[NSUserDefaults standardUserDefaults] setObject:area forKey:@"mulValue"];
            [areaselectArray release];
            NSLog(@"Released areaselectArray");
            break;
    }
}

Кнопки для UIActionSheet построены из массива, который я построил ранее (и еще не выпустил). Я помещаю кнопку «Отмена» в конец списка, используя

int countarray=[areaselectArray count];    
[areaselect.cancelButtonIndex = countarray;]

ранее при распределении моего UIActionSheet. Поскольку количество кнопок изменяется в зависимости от количества записей в массиве, я бы хотел, чтобы кнопка «Отмена» просто отклоняла UIActionSheet, но во всех других случаях оператор Switch записывает значение нажатой кнопки в «mulValue». "в стандарте UserDefaults.

Есть ли способ сделать это? Моя главная проблема сейчас, конечно, заключается в том, что функция switch не будет принимать переменную (например, countarray в моем примере). Есть ли способ записать значение в константу (?) Перед вводом оператора switch?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

Почему бы вам не использовать оператор if вместо оператора switch? Вы можете использовать свойство cancelButtonIndex для обнаружения нажатия кнопки отмены.

if (buttonIndex == actionSheet.cancelButtonIndex) {
    // cancel button has been pressed
    // do stuff
}

Также вы можете использовать строку заголовка для сравнения кнопок. Однако названия кнопок могут быть локализованы. Будьте осторожны.

NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex];
if ([buttonTitle isEqualToString:@"Cancel"]) {
    // cancel button has been pressed
    // do stuff
} else {
    //
}
0 голосов
/ 28 февраля 2011

Как вы обнаружили, «константа» может следовать только константе. Значения, с которыми будет сравниваться переменная в операторе switch, должны быть известны во время компиляции.

Чтобы получить желаемую функциональность, используйте конструкцию if / else. Просто как тот. ;)

редактирование:

И, нет , это не скомпилируется (из-за того, что я упоминал ранее):

int n = 4;
const int a = someVariable;
switch (n) {
    case a:
        printf("hi");
        break;
}
...