Wir wissen, dass wir eine if letAnweisung 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 ifAnweisung tun möchte, nicht mit einer switchAnweisung oder einem ternären ?Operator.
var foo : Int? = 10; if let bar = foo { if bar == 10 { println("Great success!") }}
if let bar = foo && bar == 10ist Use of unresolved identifier "bar"(auf der zweiten barnatürlich).
bridgeToObjectiveCist in Beta 5 verschwunden (und war möglicherweise nie für den allgemeinen Gebrauch gedacht). 2. Es gibt sowieso eine firstMethode für Swifts eingebauten ArrayTyp.