Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift AnyObject as Dictionary get元素不';不存在不是零_Ios_Swift_Casting_Anyobject - Fatal编程技术网

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]抱歉,它确实可以编译!我没有接受你的回答,因为侯赛因解释说,演员阵容也必须在比较中进行。