2015-08-14 2 views
2

Ce n'est pas autorisé (mauvaise expression)Obtenez le négatif d'une chaîne en option

if !(let nsDictionaryObject = swiftObject as? NSDictionary) 
{ 
    "Error could not make NSDictionary in \(self)" 
    return 
} 

Est-il possible de vérifier le négatif d'une expression de la chaîne en option en 1 ligne?

Répondre

9

Swift 2.0, vous pouvez utiliser

guard let nsDictionaryObject = swiftObject as? NSDictionary else { 
    "Error could not make NSDictionary in \(self)" 
    return 
} 

Cela permettra également lier nsDictionaryObject à la portée en dehors de la déclaration de garde.

+0

Je vais certainement essayer ceci quand je passerai à 2.0 grâce. – Aggressor

+0

Comme les solutions 'if ... else' ci-dessus,' nsDictionaryObject' ne sera pas défini dans la portée 'guard'. ('swiftObject' sera toujours défini.) –

+0

Oui, mais avoir' nsDictionaryObject' défini dans la 'guard' n'a pas de sens. Que pensez-vous qu'il devrait être défini comme si le casting de 'NSDictionary' échoue? – Aderstedt

0

Si vous utilisez rapide 1.2, vous pouvez le faire de cette façon:

if let nsDictionaryObject = swiftObject as? NSDictionary{} else { 

    //your code 

} 
+0

Le problème avec ceci est nsDictionaryObject est perdu en dehors de la portée. – Aggressor

0

Swift 1 vous pouvez, par exemple, utiliser la branche else ou vérifier un résultat nil.

var swiftObject: AnyObject = "" 

if let _ = swiftObject as? NSDictionary { } else { 
    println("error") 
} 

if swiftObject as? NSDictionary == nil { 
    println("error") 
} 
+0

swiftObject ne sera pas valide dans votre seconde si, la portée sera perdue. – Aggressor

+0

@Aggressor Ce n'est pas correct. 'swiftObject' est déclaré dans la portée entourant les deux instructions' if', de sorte qu'il sera également disponible à l'intérieur. – hennes

+0

Oui mais le déclarer en dehors bat le point d'obtenir une chaîne optionnelle de 1 ligne :(. Il semble que jusqu'à 2.0 rapide, il ne peut pas être fait – Aggressor