我有一个数组,其中包含表视图部分的数据

let menuItems : Dictionary<String,Dictionary<String,String>>[] = [
    [
        "data" : [
            "name":"test",
            "image":"test.png"
        ]
    ],
    [
        "data" : [
            "name":"test2",
            "image":"test2.png"
        ]
    ]
]

我想用下标访问它
func tableView(tableView: UITableView!, titleForHeaderInSection section: Int) -> String! {
    return menuItems[section]["data"]["name"]
}

并且有错误
Could not find member 'subscript'

我读过很多关于stackoverflow的类似问题,但仍然不知道如何修复它。我试图用“!”打开包装。符号并使用了另一个变量-没有结果。
你能解释一下它是怎么工作的吗?

最佳答案

println(menuItems[0]["data"]!["name"])

简短回答:menuitems[0][“data”]返回可选字典。
您可以查看下面的repl输出来了解这个问题。
设置对象。
显示数组返回常规字典。如果索引超出范围,将引发错误,而不是返回可选字典。
显示访问字典中不存在的键将返回nil
显示访问字典中的键将返回其值类型的可选项。例如,如果字典在其值中存储字符串,它将返回一个字符串?当索引到时。
显示我们不能在可选字典上使用下标。
说明我们可以强制可选字典成为字典,因为我们知道它不是零。repl显示新的返回类型为Dictionary<String, String>
显示我们随后可以使用下标获取最里面的值,这将向我们返回一个可选字符串。可选字符串是可打印的,因此上面的代码不需要第二个。
显示如果我们强制两个字典都将类型返回到它们的非可选类型,我们将得到一个正则值(字符串)。
在真正的代码中,您可能希望检查选项,并相应地处理NIL。
1>让菜单:!=[[“dict1”:[“key”:“val”],[“dict2”:[“key”:“val”]]
menu: Dictionary<String, Dictionary<String, String>>[] = size=2 {
  [0] = {
    [0] = {
      key = "dict1"
      value = {
        [0] = {
          key = "key"
          value = "val"
        }
      }
    }
  }
  [1] = {
    [0] = {
      key = "dict2"
      value = {
        [0] = {
          key = "key"
          value = "val"
        }
      }
    }
  }
}

2>菜单[0]
$R1: Dictionary<String, Dictionary<String, String>> = {
  [0] = {
    key = "dict1"
    value = {
      [0] = {
        key = "key"
        value = "val"
      }
    }
  }
}

3>菜单[0][键]
$R2: Dictionary<String, String>? = nil

4>菜单[0][“dict1”]
$R3: Dictionary<String, String>? = Some {
  [0] = {
    key = "key"
    value = "val"
  }
}

5>菜单[0][“dict1”][“key”]
REPL:6:1: error: could not find member 'subscript'
menu[0]["dict1"]["key"]
^~~~~~~~~~~~~~~~~~~~~~~

6>菜单[0][“dict1”]!
$R4: Dictionary<String, String> = {
  [0] = {
    key = "key"
    value = "val"
  }
}

7>菜单[0][“dict1”]![键]
$R5: String? = "val"

8>菜单[0][“dict1”]![键]!
$R6: String = "val"

关于arrays - 在swift中访问Array内的Dictionary值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24142785/

10-12 23:29