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

发布于 2024-10-08 18:10:43 字数 492 浏览 4 评论 0原文

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

为了区分两个滚动视图,我尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

妥活 2024-10-15 18:10:43

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

enum {
    kFirstScrollView = 0,
    kSecondScrollView = 1
};

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

这将编译没有错误。

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.

与往事干杯 2024-10-15 18:10:43

这是因为 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文