2015-08-14 4 views

ответ

9

В Swift 2.0, вы можете использовать

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

Это также связывают nsDictionaryObject с областью внешнего защитного заявления.

+0

Я обязательно попробую это, когда я обновлю до 2.0 спасибо. – Aggressor

+0

Как и 'if ... else' решения выше,' nsDictionaryObject' не будет определен в пределах 'guard'. ('swiftObject' будет по-прежнему определен.) –

+0

Да, но наличие' nsDictionaryObject', определенного в 'guard', не имеет смысла. Как вы думаете, это должно быть определено как, если приведение в 'NSDictionary' терпит неудачу? – Aderstedt

0

Если вы используете быстры 1.2 вы можете сделать это следующим образом:

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

    //your code 

} 
+0

Проблема с этим - nsDictionaryObject теряется за пределами области действия. – Aggressor

0

В Swift 1 можно, например, использовать else ветвь или проверить для nil результата.

var swiftObject: AnyObject = "" 

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

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

swiftObject не будет действителен в вашем втором случае, если область будет потеряна. – Aggressor

+0

@Aggressor Неправильно. 'swiftObject' объявлен в области, охватывающей оба оператора' if', поэтому он будет доступен и внутри них. – hennes

+0

Да, но объявляя, что он за пределами поражает точку получения 1 строки дополнительной цепочки :(Похоже, до тех пор, пока скорость 2.0 не может быть выполнена – Aggressor

Смежные вопросы