Ich möchte eine optionale Variable mit dem ternären bedingten Operator verwenden, aber es wird folgende Fehlermeldung ausgegeben: optional kann nicht als boolean verwendet werden. Was mache ich falsch?
var str1: String?
var myBool:Bool
myBool = str1 ? true : false
Sie können bool keinen String-Wert zuweisen, aber Sie können überprüfen, ob str1 null ist oder nicht wie folgt:
myBool = str1 != nil ? true : false
print(myBool)
Es wird false ausgegeben, da str1 leer ist.
Der Null-Koaleszenz-Operator kann ebenfalls verwendet werden .. Der folgende Code verwendet den ternären bedingten Operator und das erzwungene Entpacken (a!), Um auf den Wert zuzugreifen, der in a eingeschlossen ist, wenn a nicht null ist, und ansonsten b zurückgeben
Normaler ternärer Operator:
output = a != nil ? a! : b
Apple Developer Link : Siehe Demo Link
In Swift 1.2 & 2 wird die Codezeile durch ein kürzeres Format ersetzt:
output = a ?? b
Demo Link : Der Null-Koaleszenzoperator (a ?? b) entpackt ein optionales a, wenn es einen Wert enthält, oder gibt einen Standardwert b zurück, wenn a null ist.
Dies funktioniert sogar gut, wenn der gewünschte Wert eine Eigenschaft oder das Ergebnis eines Funktionsaufrufs für ein optionales Element (in Swift 3.0) ist:
return peripheral?.connected ?? false
Ternäre Betreiber operieren auf drei Ziele. Wie C hat Swift nur eine ternärer Operator, der ternäre bedingte Operator (a? b: c).
Verwendungsbeispiel für tableView
-
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return section == 2 ? 4 : 1
}
zeigt an, wenn Abschnitt gleich 2 ist, dann gibt er 4 zurück, andernfalls 1 bei false.
Falls der Vergleich auf einer Bedingung basiert
let sliderValue = Float(self.preferenceData.getLocationRadius().characters.count > 1 ?self.preferenceData.getLocationRadius():"0.1")
Hier liefert die Funktion getLocationRadius () einen String. Noch eine Sache, wenn wir kein Leerzeichen zwischen 1 und? es führt zu einem Syntaxfehler