在Swift中嵌套数组读取的正确语法?

问题描述:

本质上我试图从一个数组 - >字典 - >数组 - > Int中获取整数。我所产生的控制台错误并没有编译好,但总是返回0.我认为我的语法错了,但我不确定重写它的正确方法。在Swift中嵌套数组读取的正确语法?

convenience init(fromDict dict: [String: Any]) { 
    let dfa = dict["forms"] as? Array<Dictionary<String,Array<Any>>> 
    self.init(
     heart: dfa?[0]["abilities"]?[0] as? Int ?? 0 
    ) 
} 

<array> <dict> <key>forms</key> <array> <dict> <key>abilities</key> </array> <integer>65</integer> </array>

+0

做的就是看是否'dfa'本身的第一件事是'nil'。是吗? – matt

+0

当我删除'?'s时,dfa给了我断点错误。它不应该像我在数据源中看到的变量 – user4938361

+0

您可以看到该变量,但它可能没有'[“forms”]'条目,如果是这样,那么该条目的值可能不是' Array >>'。你有看到?尽管如此,你还没有显示出“dict”由什么组成。你把所有事情都保密,所以没人能帮你。这就是为什么我给你指示你自己想想这个问题。 – matt

你的语法看起来挺合我,但我会建议把内部数组包含Int而不是Any如果它总是包含整数。这样你就可以失去最后的转换为Int类型。

如果你的任何一个条件转换失败,那么你会得到零,而零合并运算符会将你的零转换为0.我建议编写调试代码记录传递到你的init方法的对象,然后投射一个一次一件,并逐步查看它失败的地方。

(马特在他的评论中说,如果第一个条件转换失败,你dfa变量将是零。)

+0

强力展开给我EXC BREAKPOINT。但是当变量在指定位置时,为什么它会变为零? – user4938361

+0

'as?'是一个条件转换,返回一个包含正确类型的opional,如果转换失败,则返回nil。这听起来像你的对象图中的某些东西与你期望的类型不匹配,所以演员阵容失败了。 (不要强制解开。) –

+0

用plist源更新帖子(如果有帮助的话)。我找不到这个问题的根源 – user4938361