Я столкнулся с проблемой с броском в SwiftSwift AnyObject в словарь получить элемент, который не существует, не ноль
Вот код:
init(response: NSHTTPURLResponse, representation: AnyObject)
{
super.init(entity:NSEntityDescription.entityForName("File", inManagedObjectContext: NSManagedObjectContext.currentContext())!, insertIntoManagedObjectContext:NSManagedObjectContext.currentContext());
var result : [String:AnyObject] = representation as! [String : AnyObject];
if representation["result"] != nil {
print("result = \(representation["result"])")
result = representation["result"] as! [String : AnyObject]
}
}
В некоторых случаях я ожидаю, что представление ["result"] равно nil, в тех случаях, когда я печатаю представление ["result"], debuger дает мне ноль, но я все еще передаю условие и отображаю «result = nil» в журнале, а когда он выполняет следующую строку, он сбрасывает фатальная ошибка: неожиданно найден nil при развертывании необязательного значения Это нормально, потому что я пытаюсь развернуть нулевое значение!
Но я обнаружил, что если я делаю:
var result : [String:AnyObject] = representation as! [String : AnyObject];
if result["result"] != nil {
print("result = \(result["result"])")
result = representation["result"] as! [String : AnyObject]
}
Она работает довольно хорошо
Я знаю, я знаю, что некоторые из вас скажут: вы нашли решение, почему пост на stackoverflow- I потому что я хочу понять, почему первое решение не работает, и потому что моя ошибка, конечно, не является специфической для этого контекста.
Thx для ответа, мой код компилируется, я не знаю, почему он не скомпилирован на вашей стороне второй, в реальности я использовал: if let result = (представление ["result"] ?? в виде? [String: AnyObject], чтобы проверить, но для моего объяснения я хотел быть более общим. Ответ, который я искал, - это от Хусейна Альзана, где мне нужно было отливать, когда я сравниваю, поэтому в конце я делаю = если пусть result = ((представление ["result"] as? [String: AnyObject]) ??)) ? [String: AnyObject] – Fogia
Извините, но он компилируется! Я не принял вашего ответа, потому что Хусейн объяснил, что актерский состав должен быть сделан и на сравнении. – Fogia