Ios Swift AnyObject as Dictionary get元素不';不存在不是零
我遇到了演员斯威夫特的问题 代码如下:Ios Swift AnyObject as Dictionary get元素不';不存在不是零,ios,swift,casting,anyobject,Ios,Swift,Casting,Anyobject,我遇到了演员斯威夫特的问题 代码如下: init(response: NSHTTPURLResponse, representation: AnyObject) { super.init(entity:NSEntityDescription.entityForName("File", inManagedObjectContext: NSManagedObjectContext.currentContext())!, insertIntoManagedObjectContext:NSMa
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”]时,调试程序给我nil,但我仍然传递条件并在日志中显示“result=nil”,当它执行下一行时,它崩溃
致命错误:在展开可选值时意外发现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上发布-
之所以这样做,是因为我想理解为什么第一个解决方案不起作用,因为我的错误肯定不是特定于此上下文。您的代码无法编译,因为
表示[“result”]
导致
错误:“下标”的用法不明确
除此之外,考虑使用<代码>如果允许改为:
if let res = result["result"] {
print("result = \(res)")
result = res as! [String : AnyObject]
}
除此之外,您还应使用guard
s:
guard let result = representation as? [String : AnyObject] else {
// not a suitable dictionary
return
}
if let res = result["result"] {
guard let resultDic = res as? [String : AnyObject] else {
// not a suitable dictionary neither
return
}
print(resultDic)
}
因为您必须在检查字典之前将
表示[“结果”]
强制转换到字典中,所以如果您将表示[“结果”]键入为![String:AnyObject]
它应该能正常工作。Thx对于回答,我的代码正在编译,我不知道为什么它不能在你这边编译第二,在现实中,我曾经做过一个:if let result=(表示[“result”]??表示)as?[String:AnyObject]进行检查,但为了便于解释,我希望更一般。我一直在寻找的答案来自侯赛因·阿尔扎德,当我比较时,我需要在那里进行转换,所以最后我做=如果让结果=((表示[“结果”]为?[String:AnyObject])?表示)为?[String:AnyObject]抱歉,它确实可以编译!我没有接受你的回答,因为侯赛因解释说,演员阵容也必须在比较中进行。