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.
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.
Sie können ?:
operator verwenden. a ? a : b
ist gleich wie a ?: b
(mit Nebeneffekt von a
nur einmal ausgeführt)
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.
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>
Tags und Links objective-c ios cocoa-touch