Frage

ich einen Scheck in einer iPhone-Anwendung zu tun -

int var;
if (var != nil)

Es funktioniert, aber in X-CODE Dies ist eine Warnung zu erzeugen „Vergleich zwischen Zeigern und integer.“ Wie kann ich es beheben?

Ich komme aus der Java-Welt, wo ich bin ziemlich sicher, die obige Aussage auf compliation scheitern würde.

War es hilfreich?

Lösung

Primitives kann nicht nil werden. nil ist für Zeiger auf Objective-C-Objekte reserviert. nil ist technisch ein Zeigertyp und Misch Zeiger und Zahlen werden ohne Guss werden fast immer in einer Compiler-Warnung führen, mit einer Ausnahme:. es vollkommen in Ordnung, implizit ohne Guss die ganze Zahl 0 auf einen Zeiger zu konvertieren

Wenn Sie zwischen 0 und „keinen Wert“ unterscheiden wollen, verwenden Sie die NSNumber Klasse:

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

Andere Tipps

if (var) {
    ...
}

Willkommen in der wunderbaren Welt von C. Jeder Wert nicht gleich der Zahl 0 oder ein Null-Zeiger ist wahr.

Sie haben aber einen Fehler: Ints nicht null sein kann. Sie sind Werttypen wie in Java.

Wenn Sie auf „Feld“ die ganze Zahl ist, dann müssen Sie es für seine Adresse fragen:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top