Упрощение оператора переключения (Objective-C) - PullRequest
1 голос
/ 09 февраля 2010

Я пытаюсь упростить оператор switch, для написания которого требуется много места и времени. Посмотри код, ты поймешь. Если нет, я объясню позже.

// When row is selected
- (void)pickerView:(UIPickerView *)pickerTimer didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

    switch (row) {
        case 0:
            NSLog(@"It obviously worked.0");
            break;
        case 1:
            NSLog(@"It obviously worked.1");
            break;
        case 2:
            NSLog(@"It obviously worked.2");
            break;
        case 3:
            NSLog(@"It obviously worked.3");
            break;
        case 4:
            NSLog(@"It obviously worked.4");
            break;
        case 5:
            NSLog(@"It obviously worked.5");
            break;
        case 6:
            NSLog(@"It obviously worked.6");
            break;
        default:
            NSLog(@"It did kindof work.NIL");
            break;
    }
}

Есть ли способ упростить это? Просто делай как,

NSLog(@"It did work! %@", row);

Для записи я попробовал это, и это не сработало.

Ответы [ 2 ]

8 голосов
/ 09 февраля 2010

Спецификатор формата для целого числа: %d - %@ указывает объект.Чтобы быть в безопасности, вы должны также привести NSInteger к int, когда вы передадите его printf() (так что вы бы написали @"%d", (int)row), потому что размер NSInteger не гарантированно равен спецификатору %dговорит printf() ожидать.

Кстати, вам не нужно повторять это для каждого оператора case.Без перерыва управление перейдет к следующему случаю.

6 голосов
/ 09 февраля 2010

Как сказал Чак, ты можешь ...

NSLog(@"It did work! %d", row);

... или вы можете придумать и превратить его в объект ...

NSLog(@"It did work! %@", [NSNumber numberWithInt:row]);
...