Операторы switch Objective C и целые константы
У меня есть контроллер, который служит делегатом для двух списков прокрутки, которые находятся в поле зрения, которыми управляет вышеупомянутый контроллер представления.
Чтобы различать два вида прокрутки, я пытаюсь использовать оператор switch
(вместо простого сравнения указателя с оператором if
). Я отметил оба вида прокрутки как 0 и 1, как этот
NSUInteger const kFirstScrollView = 0;
NSUInteger const kSecondScrollView = 1;
Когда я пытаюсь использовать эти константы в инструкции switch, компилятор говорит, что аргументы case не являются константами.
switch (scrollView.tag) {
case kFirstScrollView: {
// do stuff
}
case kSecondScrollView: {
// do stuff
}
}
Что я делаю неправильно?
Ответы
Ответ 1
Это можно решить с помощью анонимного (хотя и не обязательно) типа enum
:
enum {
kFirstScrollView = 0,
kSecondScrollView = 1
};
switch (scrollView.tag) {
case kFirstScrollView: {
// do stuff
}
case kSecondScrollView: {
// do stuff
}
}
Это будет скомпилировано без ошибок.
Ответ 2
Это потому, что case case требует постоянного выражения. Теперь в C и, следовательно, в Obj-C, при создании переменной const не создается истинная константа. Таким образом, вы получаете эту ошибку. Но если вы используете С++ или Obj-С++, тогда это сработает.
Ниже приведена дополнительная подсказка здесь и здесь.