web-dev-qa-db-de.com

Wie verwenden Sie die optionale Variable in einem ternären Bedingungsoperator?

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
50
Yashwanth Reddy

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.

75
Dharmesh

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! : bApple 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. 

62
Abhijeet

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
3
Robert Atkins

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.

3
Jack

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

0
Muhammad Nayab