Objective C switch 语句和命名整型常量
我有一个控制器,它充当两个滚动视图的委托,这两个滚动视图放置在由上述视图控制器管理的视图中。
为了区分两个滚动视图,我尝试使用 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
}
}
我做错了什么?
I have a controller which serves as a delegate to two scrollviews which are placed in view managed by aforementioned view controller.
To distinguish between two scroll views I'm trying to use switch
statement (instead of simple pointer comparison with if
statement). I have tagged both scroll views as 0 and 1 like this
NSUInteger const kFirstScrollView = 0;
NSUInteger const kSecondScrollView = 1;
When I try to use these constants in a switch statement, the compiler says that case statements are not constants.
switch (scrollView.tag) {
case kFirstScrollView: {
// do stuff
}
case kSecondScrollView: {
// do stuff
}
}
What am I doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这可以通过使用匿名(尽管不一定如此)
enum
类型来解决:这将编译没有错误。
This can be solved through the use of an anonymous (though not necessarily so)
enum
type:This will compile without errors.
这是因为 case 语句需要常量表达式。现在在 C 中,因此在 Obj-C 中,将变量设置为 const 并不会创建真正的常量。因此你会得到这个错误。但如果您使用 C++ 或 Obj-C++ 那么这将起作用。
更多提示可在此处 和此处。
This is because case statement requires constant expression. Now in C and thus in Obj-C making a variable const does not create a true constant. Thus you are getting this error. But if you use C++ or Obj-C++ then this will work.
Some more hint is available here and here.