Ich fange an zu finden, dass mein Code übersät ist mit:
%Vor%Gibt es einen kürzeren (zeichenweisen) Vergleich für NULL?
Hintergrund: Ich verwende die SBJson-Bibliothek, um eine JSON-Zeichenfolge zu analysieren, und für einige der Schlüssel gibt es oft Nullwerte (nach Entwurf).
Nichts eingebaut, aber es wäre vernünftig und einfach, eine Funktion MYIsNull()
zu erstellen, die den von Ihnen gewünschten Vergleich durchführt. Denken Sie einfach darüber nach, was Sie zurückgeben möchten, falls der Schlüssel fehlt.
Vielleicht möchten Sie den anderen Weg gehen und -null
in nil
umwandeln. Zum Beispiel könnten Sie eine Kategorie in NSDictionary
wie folgt hinzufügen:
Nein, Sie müssen auf NSNull
testen. Wenn Sie jedoch feststellen, dass Ihr Code davon verunreinigt ist, möchten Sie möglicherweise einen #define
dafür erstellen.
Beachten Sie auch, dass, wenn p
gleich null ist oder wenn p
keinen Wert für someKey
hat, [p objectForKey@"somekey"] != [NSNull null]
auf YES
auswertet.
Sie wollen wahrscheinlich so etwas:
%Vor%Gibt es einen kürzeren (zeichenweisen) Vergleich für NULL?
[NSNull null]
ist 13 Zeichen. Sie können sagen:
Oder machen Sie eine Funktion:
%Vor%Oder (wirbelt) benutzt eine Kategorie:
%Vor% Seien Sie vorsichtig, wie Sie diese Kategorie benennen, wenn Sie mit nil
receivern umgehen.
Da Sie SBJSON
verwenden, können Sie den Code einfach ändern - Sie haben die Quelle.
Ich habe tatsächlich SBJSON
Parser geändert, um [NSNull null]
Werte zu überspringen. Sie werden nicht zu den Wörterbüchern hinzugefügt und wenn ich objectForKey:
anrufe, bekomme ich nie [NSNull null]
, ich bekomme nur nil
. Dann muss ich in den meisten Fällen nicht einmal prüfen, ob der Wert nil
ist, da das Aufrufen einer Methode auf nil
normalerweise das erwartete Ergebnis liefert.
Wenn Sie sich nur Gedanken darüber machen, wie viel Zeit Sie beim Schreiben brauchen, sollten Sie Makros in Betracht ziehen:
%Vor%dann
%Vor%Ziemlich sicher können Sie einfach sagen
%Vor%Ich benutze NSNull nicht sehr, also bin ich mir nicht 100% ig sicher, aber ich denke, es wird als falsch getestet und alle anderen Objekttests als wahr.
Tags und Links objective-c