Wir wissen, dass wir eine if let
Anweisung als Abkürzung verwenden können, um nach einer optionalen Null zu suchen und diese dann auszupacken.
Ich möchte dies jedoch mit einem anderen Ausdruck unter Verwendung des logischen AND-Operators kombinieren &&
.
So mache ich hier zum Beispiel eine optionale Verkettung, um meinen rootViewController zu entpacken und optional auf tabBarController herunterzuspielen. Aber anstatt if-Anweisungen verschachtelt zu haben, möchte ich sie kombinieren.
if let tabBarController = window!.rootViewController as? UITabBarController {
if tabBarController.viewControllers.count > 0 {
println("do stuff")
}
}
Kombiniertes Geben:
if let tabBarController = window!.rootViewController as? UITabBarController &&
tabBarController.viewControllers.count > 0 {
println("do stuff")
}
}
Das Obige gibt den Kompilierungsfehler an. Verwendung des nicht aufgelösten Bezeichners 'tabBarController'
Vereinfachung:
if let tabBarController = window!.rootViewController as? UITabBarController && true {
println("do stuff")
}
Dies führt zu einem Kompilierungsfehler. Der gebundene Wert in einer bedingten Bindung muss vom optionalen Typ sein . Nachdem verschiedene syntaktische Variationen versucht wurden, gibt jede einen anderen Compilerfehler aus. Ich habe noch keine erfolgreiche Kombination aus Reihenfolge und Klammern gefunden.
Die Frage ist also, ist es möglich und wenn ja, welche Syntax ist richtig?
Beachten Sie, dass ich dies mit einer if
Anweisung tun möchte, nicht mit einer switch
Anweisung oder einem ternären ?
Operator.
var foo : Int? = 10; if let bar = foo { if bar == 10 { println("Great success!") }}
if let bar = foo && bar == 10
ist Use of unresolved identifier "bar"
(auf der zweiten bar
natürlich).
bridgeToObjectiveC
ist in Beta 5 verschwunden (und war möglicherweise nie für den allgemeinen Gebrauch gedacht). 2. Es gibt sowieso eine first
Methode für Swifts eingebauten Array
Typ.