Wie teste ich, ob eine primitive in Objective-C gleich Null ist?
-
23-08-2019 - |
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.
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