Estou desembrulhando dois valores de um dicionário e antes de usá-los, tenho que convertê-los e testar o tipo certo. Isto é o que eu vim com:
var latitude : AnyObject! = imageDictionary["latitude"]
var longitude : AnyObject! = imageDictionary["longitude"]
if let latitudeDouble = latitude as? Double {
if let longitudeDouble = longitude as? Double {
// do stuff here
}
}
Mas eu gostaria de empacotar os dois se deixarmos as consultas em um. Para que fosse algo assim:
if let latitudeDouble = latitude as? Double, longitudeDouble = longitude as? Double {
// do stuff here
}
Essa sintaxe não está funcionando, então eu queria saber se havia uma maneira bonita de fazer isso.
if-statement
swift
optional
bronzeado
fonte
fonte
Respostas:
Atualização para o Swift 3:
O seguinte funcionará no Swift 3:
Lembre-se de que, se uma das ligações opcionais tentadas falhar, o código dentro do
if-let
bloco não será executado.Nota: nem todas as cláusulas precisam ser cláusulas 'let'; você pode ter uma série de verificações booleanas separadas por vírgulas.
Por exemplo:
Swift 1.2:
A Apple pode ter lido sua pergunta, porque seu código esperado é compilado corretamente no Swift 1.2 (na versão beta hoje):
Swift 1.1 e versões anteriores:
Aqui estão as boas notícias - você pode fazer isso totalmente. Uma instrução switch em uma tupla de seus dois valores pode usar a correspondência de padrões para converter ambos ao
Double
mesmo tempo:Atualização: Esta versão do código agora funciona corretamente.
fonte
if let app = UIApplication.sharedApplication().delegate as? AppDelegate, let window = app.window {...}
. A segundalet
também é obrigatória? Quero dizer,app
não é mais um opcional. certo?app
não é mais um opcional, mas suawindow
propriedade é (seu tipo éUIWindow?
), e é isso que você está desembrulhando.Com o Swift 3, você pode usar encadeamento opcional, declaração de chave ou padrão opcional para resolver seu problema.
1. Usando
if let
(ligação opcional / encadeamento opcional)A linguagem de programação Swift afirma sobre o encadeamento opcional:
Portanto, no caso mais simples, você pode usar o seguinte padrão para usar várias consultas em sua operação de encadeamento opcional:
2. Usando tuplas e ligação de valor em uma instrução switch
Como alternativa a um encadeamento opcional simples, a instrução switch pode oferecer uma solução refinada quando usada com tuplas e vinculação de valor:
3. Usando tuplas com
if case
(padrão opcional)if case
( padrão opcional ) fornece uma maneira conveniente de desembrulhar os valores da enumeração opcional. Você pode usá-lo com tuplas para executar algum encadeamento opcional com várias consultas:fonte
Swift 3.0
fonte