10

前述のビューコントローラーによって管理されるビューに配置される2つのスクロールビューへのデリゲートとして機能するコントローラーがあります。

2 つのスクロール ビューを区別するために、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 に答える