10

我有一个控制器,它充当两个滚动视图的委托,它们放置在由上述视图控制器管理的视图中。

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

我究竟做错了什么?

4

2 回答 2

16

这可以通过使用匿名(尽管不一定如此)enum类型来解决:

enum {
    kFirstScrollView = 0,
    kSecondScrollView = 1
};

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

这将编译没有错误。

于 2010-12-20T08:41:40.860 回答
8

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

更多提示可在此处此处获得。

于 2010-12-20T08:50:31.687 回答