15

iPhoneアプリケーションでチェックしています -

int var;
if (var != nil)

動作しますが、X-Code では「ポインターと整数の比較」という警告が生成されます。どうすれば修正できますか?

私はJavaの世界から来ました.Javaの世界では、上記のステートメントがコンパイル時に失敗すると確信しています。

4

2 に答える 2

37

プリミティブはできませんnilnilObjective-Cオブジェクトへのポインタ用に予約されています。 nilは技術的にはポインタ型であり、キャストなしでポインタと整数を混在させると、ほとんどの場合、コンパイラの警告が発生します。ただし、1つの例外があります。つまり、整数0をキャストなしのポインタに暗黙的に変換することはまったく問題ありません。

0と「値なし」を区別する場合は、次のNSNumberクラスを使用します。

NSNumber *num = [NSNumber numberWithInt:0];
if(num == nil)  // compare against nil
    ;  // do one thing
else if([num intValue] == 0)  // compare against 0
    ;  // do another thing
于 2009-05-21T22:17:19.753 に答える
11
if (var) {
    ...
}

素晴らしい C の世界へようこそ。整数 0 またはヌル ポインターに等しくない値はすべて true です。

しかし、バグがあります: ints は null にできません。それらは Java と同じように値型です。

整数を「ボックス化」したい場合は、そのアドレスを尋ねる必要があります。

int can_never_be_null = 42; // int in Java
int *can_be_null = &can_never_be_null; // Integer in Java
*can_be_null = 0; // Integer.set or whatever
can_be_null = 0;  // This is setting "the box" to null,
                  //  NOT setting the integer value
于 2009-05-21T22:13:12.117 に答える