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

时间:2010-12-20 08:37:02

标签: cocoa-touch uiscrollview switch-statement uiscrollviewdelegate

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

要区分两个滚动视图,我正在尝试使用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
    }
}

我做错了什么?

2 个答案:

答案 0 :(得分:16)

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

enum {
    kFirstScrollView = 0,
    kSecondScrollView = 1
};

switch (scrollView.tag) {
    case kFirstScrollView: {
      // do stuff
    }
    case kSecondScrollView: {
      // do stuff
    }
}

这将编译没有错误。

答案 1 :(得分:8)

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

可提供更多提示herehere