Sabemos que podemos usar uma if letinstrução como um atalho para verificar se há um nil opcional e depois desembrulhar.
No entanto, quero combinar isso com outra expressão usando o operador lógico AND &&.
Então, por exemplo, aqui eu faço o encadeamento opcional para desempacotar e opcionalmente fazer o downcast do meu rootViewController para tabBarController. Mas, em vez de aninhar as instruções if, gostaria de combiná-las.
if let tabBarController = window!.rootViewController as? UITabBarController {
if tabBarController.viewControllers.count > 0 {
println("do stuff")
}
}
Doação combinada:
if let tabBarController = window!.rootViewController as? UITabBarController &&
tabBarController.viewControllers.count > 0 {
println("do stuff")
}
}
O acima dá o erro de compilação Uso do identificador não resolvido 'tabBarController'
Simplificando:
if let tabBarController = window!.rootViewController as? UITabBarController && true {
println("do stuff")
}
Isso dá um erro de compilação. O valor de limite em uma associação condicional deve ser do tipo opcional . Tendo tentado várias variações sintáticas, cada uma fornece um erro de compilador diferente. Ainda estou para encontrar a combinação vencedora de ordem e parênteses.
Portanto, a questão é: é possível e, em caso afirmativo, qual é a sintaxe correta?
Observe que desejo fazer isso com uma ifdeclaração, não com uma switchdeclaração ou com um ?operador ternário .
var foo : Int? = 10; if let bar = foo { if bar == 10 { println("Great success!") }}
if let bar = foo && bar == 10é Use of unresolved identifier "bar"(no segundo bar, é claro).
bridgeToObjectiveCdesapareceu no beta 5 (e muito possivelmente nunca foi planejado para uso geral). 2. De qualquer maneira, há um firstmétodo no Arraytipo integrado do Swift .