Gibt es eine Möglichkeit, Zeichenfolgen für nil
und ""
in Swift zu überprüfen ? In Rails kann ich blank()
überprüfen.
Ich habe dies derzeit, aber es scheint übertrieben:
if stringA? != nil {
if !stringA!.isEmpty {
...blah blah
}
}
Antworten:
Wenn Sie mit optionalen Strings arbeiten, funktioniert dies:
Der
??
Null-Koaleszenz-Operator gibt die linke Seite zurück, wenn er nicht Null ist, andernfalls gibt er die rechte Seite zurück.Sie können es auch so verwenden, um einen Standardwert zurückzugeben:
quelle
Sie könnten vielleicht die if-let-where-Klausel verwenden:
Swift 3:
Swift 2:
quelle
fatal error: unexpectedly found nil while unwrapping an Optional value
aber meine Konstantestring
enthält Zeichenfolgendaten.if let string = string, !string.isEmpty { /* string is not blank */ }
guard let
ist eine Alternative, wenn Sie den Kontrollfluss unterhalb der Anweisung beenden möchten. Allerdings wird in der where-Klausel hier nichts ausgepackt (das! Ist eine boolesche Negation)Wenn Sie Swift 2 verwenden, ist hier ein Beispiel, das mein Kollege entwickelt hat und das die Eigenschaft isNilOrEmpty für optionale Zeichenfolgen hinzufügt:
Sie können dann isNilOrEmpty für die optionale Zeichenfolge selbst verwenden
quelle
where Wrapped:
ein Protokoll und kein Typ angegeben werden muss.isNilOrEmpty
zuhasValue
(oder so ähnlich) und umgekehrt die LogikVerwendung der
guard
AnweisungIch habe Swift eine Weile benutzt, bevor ich von der
guard
Aussage erfahren habe . Jetzt bin ich ein großer Fan. Es wird ähnlich wie dieif
Anweisung verwendet, ermöglicht jedoch eine frühzeitige Rückgabe und sorgt im Allgemeinen für viel saubereren Code.Sie können Folgendes tun, um bei der Überprüfung sicherzustellen, dass eine Zeichenfolge weder null noch leer ist:
Dadurch wird die optionale Zeichenfolge ausgepackt und auf einmal überprüft, ob sie nicht leer ist. Wenn es null (oder leer) ist, kehren Sie sofort von Ihrer Funktion (oder Schleife) zurück und alles danach wird ignoriert. Wenn die Guard-Anweisung jedoch erfolgreich ist, können Sie Ihre unverpackte Zeichenfolge sicher verwenden.
Siehe auch
quelle
nil
leer oder leer ist, möchte man nicht aufrufenprint(myString)
. Wenn Sie die Ausführung nach einemnil
oder leer fortsetzenString
müssten, würden Sieif let
eher als verwendenguard
.Mit Swift 5 können Sie eine
Optional
Erweiterung fürString
type mit einer booleschen Eigenschaft implementieren , die zurückgegeben wird, wenn eine optionale Zeichenfolge keinen Wert hat oder leer ist:Allerdings
String
implementiertisEmpty
Eigenschaft von zu Protokoll entsprichtCollection
. Deshalb können wir den vorherigen Code des generische Einschränkung (ersetzenWrapped == String
) mit einem breiteren ein (Wrapped: Collection
) , so dassArray
,Dictionary
undSet
auch unsere neuen profitierenisNilOrEmpty
Eigenschaft:Verwendung mit
String
s:Verwendung mit
Array
s:Quellen:
quelle
isNilOrEmpty
umisEmptyOrNil
das Präfix übereinstimmen , so dass es für die automatische Vervollständigung über das gleiche Muster leicht auffindbar ist. Ich habe festgestellt, dass diese Erweiterung von Kollegen, mit denen ich zusammenarbeite, mehr angenommen wird, nur weil sie es so finden.quelle
Ich weiß, dass es viele Antworten auf diese Frage gibt, aber keine davon scheint (meiner Meinung nach) so bequem zu sein, um
UITextField
Daten zu validieren , was einer der häufigsten Fälle für die Verwendung ist:Sie können einfach verwenden
Sie können das auch überspringen,
.trimmingCharacters(in:.whitespaces)
wenn Sie Leerzeichen nicht als leere Zeichenfolge betrachten, oder es für komplexere Eingabetests wie verwendenquelle
Ich würde empfehlen.
map
wendet das Funktionsargument an, wenn das optionale ist.Some
.Die Spielplatzaufnahme zeigt auch eine andere Möglichkeit mit dem neuen Swift 1.2, wenn optionale Bindung zugelassen wird.
quelle
Wenn Sie als nicht optional auf die Zeichenfolge zugreifen möchten, sollten Sie Ryans Antwort verwenden . Wenn Sie sich jedoch nur um die Nichtleere der Zeichenfolge kümmern, ist meine bevorzugte Abkürzung dafür
Schon seit
==
mit optionalen Booleschen Werten gut funktioniert, bleibt der Code meiner Meinung nach lesbar, ohne die ursprüngliche Absicht zu verschleiern.Wenn Sie das Gegenteil überprüfen möchten: Wenn die Zeichenfolge
nil
oder ist""
, bevorzuge ich es, beide Fälle explizit zu überprüfen, um die richtige Absicht zu zeigen:quelle
SWIFT 3
Verwenden Sie diese Option für eine optionale Zeichenfolge:
quelle
Swift 3 Zum Überprüfen von Empty String best way
quelle
Sie können Ihre eigene benutzerdefinierte Funktion erstellen, wenn Sie dies erwarten.
quelle
Swift 3-Lösung Verwenden Sie den optionalen entpackten Wert und vergleichen Sie ihn mit dem Booleschen Wert.
quelle
Verwenden von isEmpty
AllSatisfy verwenden
Verwenden eines optionalen Strings
Referenz: https://useyourloaf.com/blog/empty-strings-in-swift/
quelle
Erstellen Sie eine String-Klassenerweiterung:
Beachten Sie, dass dies TRUE zurückgibt, wenn die Zeichenfolge ein oder mehrere Leerzeichen enthält. Um eine leere Zeichenfolge als "leer" zu behandeln, verwenden Sie ...
... stattdessen. Dies erfordert Foundation.
Verwenden Sie es so ...
quelle
Swift 3 Dies funktioniert gut, um zu überprüfen, ob die Zeichenfolge wirklich leer ist. Weil isEmpty true zurückgibt, wenn ein Leerzeichen vorhanden ist.
Beispiele:
quelle
Sie sollten so etwas tun:
if !(string?.isEmpty ?? true) { //Not nil nor empty }
Der Null-Koaleszenz-Operator prüft, ob das Optionale nicht Null ist. Falls es nicht Null ist, prüft er seine Eigenschaft, in diesem Fall ist Leer. Da diese Option Null sein kann, geben Sie einen Standardwert an, der verwendet wird, wenn Ihre Option Null ist.
quelle
Dies ist eine allgemeine Lösung für alle Typen, die dem
Collection
Protokoll entsprechen. Dazu gehörenString
:quelle
Beim Übergeben von Werten von der lokalen Datenbank an den Server und umgekehrt hatte ich zu viele Probleme mit? 'S und!' S und was nicht.
Also habe ich ein Swift3.0-Dienstprogramm erstellt, um Nullfälle zu behandeln, und ich kann? S und! Im Code fast vollständig vermeiden.
Ex:-
Vor :
Nach dem :
und wenn es erforderlich ist, nach einer gültigen Zeichenfolge zu suchen,
Dies ersparte mir die Mühe, nach dem Schreiben von Code, der vernünftigerweise Sinn macht, zahlreiche? 'Und!' S hinzuzufügen und zu entfernen.
quelle
Verwenden Sie den ternären Operator (auch als bedingter Operator bezeichnet
C++ forever!
):if stringA != nil ? stringA!.isEmpty == false : false { /* ... */ }
Das
stringA!
gewaltsame Auspacken erfolgt nur dannstringA != nil
, wenn es sicher ist. Die== false
Ausführlichkeit ist etwas lesbarer als ein weiteres Ausrufezeichen in!(stringA!.isEmpty)
.Ich persönlich bevorzuge eine etwas andere Form:
if stringA == nil ? false : stringA!.isEmpty == false { /* ... */ }
In der obigen Anweisung wird sofort sehr deutlich, dass der gesamte
if
Block nicht ausgeführt wird, wenn eine Variable vorhanden istnil
.quelle
hilfreich, wenn Sie einen Wert von UITextField abrufen und nach
nil
&empty
string suchenHier ist Ihre Funktion (wenn Sie auf eine tippen
button
), die einen String von UITextField erhält und einige andere Dinge erledigtDies kümmert sich sowohl um den
nil
Wert als auch um dieempty
Zeichenfolge.Es hat perfekt für mich funktioniert.
quelle
Meiner Meinung nach ist die beste Möglichkeit, die Null- und Leerzeichenfolge zu überprüfen, die Anzahl der Zeichenfolgen.
quelle
Sie können diese Funktion verwenden
quelle
nil
ausgelöst, da Sie diese Funktion überhaupt nicht ausführen können (außer von objc, in welchem Fall sie tatsächlich abstürzt).