【问题标题】:Correct syntax for reading from a nested array in Swift?从 Swift 中的嵌套数组读取的正确语法?
【发布时间】:2016-12-31 21:33:14
【问题描述】:

本质上,我试图从 Array -> Dictionary -> Array -> Int 中获取整数。我所拥有的没有产生控制台错误并且编译正常,但总是返回 0。我认为我的语法错误,但我不确定重写它的正确方法。

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>

【问题讨论】:

  • 首先要看dfa本身是不是nil。是吗?
  • 当我删除 ?s 时,dfa 给了我断点错误。它不应该,因为我可以在数据源中看到变量
  • 您可以看到该变量,但它可能没有["forms"] 条目,如果有,则该条目的值可能不是Array&lt;Dictionary&lt;String,Array&lt;Any&gt;&gt;&gt;。你有看到?不过,您还没有向我们展示dict 的组成部分。你把一切都保密,所以没有人可以帮助你。这就是为什么我要指导你自己思考这个问题。
  • 是的,我使用let dfs = dict["forms"] as? Array&lt;Dictionary&lt;String,Dictionary&lt;String,Any&gt;&gt;&gt;["forms"] 的字典中获取值。 ["forms"] 中有一个数组,我似乎无法从中提取此数据
  • 如果它应该是一个 plist 或任何类型的 xml,它完全是格式错误的。

标签: ios arrays swift nested


【解决方案1】:

你的语法对我来说看起来不错,虽然我建议让内部数组包含 Int 而不是 Any 如果它总是包含整数。这样您就可以将最终转换为 Int 类型。

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

(正如马特在评论中所说,如果第一个条件转换失败,您的 dfa 变量将为 nil。)

【讨论】:

  • 强制解开它会给我 EXC BREAKPOINT。但是为什么当变量在指定位置时它会变成nil呢?
  • as? 是一个条件转换,它返回一个可选的 ether 包含正确类型的选项,如果转换失败,则返回 nil。听起来您的对象图中的某些内容与您期望的类型不匹配,因此强制转换失败。 (不要强制解包。)
  • 如果有帮助,用 plist 源更新帖子。我找不到这个问题的根源
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2013-09-05
相关资源
最近更新 更多