NSString Vergleich Wo @ "" == Nil

8

Ich möchte zwei Strings vergleichen, bei denen nil gleich einer leeren Zeichenkette sein soll (@ ""). Im Moment mache ich das, was gut funktioniert:

%Vor%

Aber es scheint, als könnte es etwas einfacheres geben, das ich vermisse.

Ich suche hier nicht nach Groß- / Kleinschreibung. Wenn der Fall anders ist, sollte der Test fehlschlagen.

    
Dave Batton 28.05.2014, 23:45
quelle

5 Antworten

13
%Vor%

funktioniert, aber es gibt null zurück, wenn es auch null ist. Wenn das für Sie akzeptabel ist, ist es einfacher.

btw verschachtelte ternäre Operatoren sind in der Privatsphäre Ihres eigenen Hauses in Ordnung, aber wenn Sie Code zum Teilen schreiben, ist es vielleicht besser, es ein wenig zu verbreiten, damit es offensichtlich ist.

Als Reaktion auf Kommentare ist die Art und Weise, wie ich es tun würde:

%Vor%

Wenn eine der beiden Klauseln erfolgreich ist, sind die Strings gleich. Die zweite fängt alle Nicht-Null-Zeichenfolgen ab, die tatsächlich gleich sind, einschließlich @"" == @"" . Die ersten Fänge a und b sowohl nil , als auch 1 nil und 1 @"" . Ich habe zuerst die erste als ((a == nil) && (b == nil)) geschrieben, aber Sie sagten @"" sollte gleich Null sein.

    
Adam Eberbach 28.05.2014, 23:48
quelle
12

Sie können ?: operator verwenden. a ? a : b ist gleich wie a ?: b (mit Nebeneffekt von a nur einmal ausgeführt)

%Vor%     
Bryan Chen 28.05.2014 23:48
quelle
9

Ich würde in diesem Fall eine Funktion vorschlagen:

%Vor% %Vor%

Viel einfacher zu lesen. Sie können die Interna der Funktion tun, wie Sie wollen; Ich würde sagen, dass die ternäre Bedingung dort vernünftig wäre.

    
Josh Caswell 29.05.2014 00:03
quelle
2
%Vor%

Einer der wenigen wichtigen Gründe für die Verwendung von Eigenschaften-Getter / Setter-Methoden besteht darin, dass Sie bestimmte Bedingungen für eine Eigenschaft erzwingen können, z. B. nie nil zu sein.

Sie können leicht sicherstellen, dass Eigenschaften wie firstName niemals null sind, indem Sie eine benutzerdefinierte Getter- oder Setter-Methode an einem einzigen Ort implementieren, und dann müssen Sie sich nicht mit den seltsamen ternären Operatoren beschäftigen, wenn Sie auf solche Eigenschaften zugreifen / p>     

Darren 29.05.2014 02:46
quelle
2

Warum nicht ein Makro machen? Scheint wie ein perfekter Anwendungsfall dafür.

Alternativ können Sie eine Kategorie für NSString hinzufügen: +string:isEqualToString: .

    
Archagon 29.05.2014 11:21
quelle

Tags und Links