Операторы 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-С++, тогда это сработает.

Ниже приведена дополнительная подсказка здесь и здесь.