Objective C switch语句和命名整数常量

Eim*_*tas 10 cocoa-touch switch-statement uiscrollview uiscrollviewdelegate

我有一个控制器,它作为两个滚动视图的委托,放置在由前面提到的视图控制器管理的视图中.

为了区分两个滚动视图,我试图使用switch语句(而不是简单的指针与if语句比较).我已将这两个滚动视图标记为0和1

NSUInteger const kFirstScrollView = 0;
NSUInteger const kSecondScrollView = 1;
Run Code Online (Sandbox Code Playgroud)

当我尝试在switch语句中使用这些常量时,编译器说case语句不是常量.

switch (scrollView.tag) {
    case kFirstScrollView: {
      // do stuff
    }
    case kSecondScrollView: {
      // do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Sed*_*ien 16

这可以通过使用匿名(但不一定是这样)enum类型来解决:

enum {
    kFirstScrollView = 0,
    kSecondScrollView = 1
};

switch (scrollView.tag) {
    case kFirstScrollView: {
      // do stuff
    }
    case kSecondScrollView: {
      // do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

这将编译没有错误.


tas*_*oor 8

这是因为case语句需要持续表达.现在在C中因此在Obj-C中使变量const不会产生真正的常量.因此,您收到此错误.但是,如果您使用C++或Obj-C++,那么这将起作用.

这里这里提供更多提示.

  • define和enum.他们都在C/Obj-C中创造了真正的常数. (2认同)