Objective C switch statements and named integer constants

只愿长相守 提交于 2019-12-09 10:06:58

问题


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?


回答1:


This can be solved through the use of an anonymous (though not necessarily so) enum type:

enum {
    kFirstScrollView = 0,
    kSecondScrollView = 1
};

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

This will compile without errors.




回答2:


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.



来源:https://stackoverflow.com/questions/4488026/objective-c-switch-statements-and-named-integer-constants

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!