我有一个数组,其中包含表视图部分的数据
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/