字典没有名为'allKeys'的成员 - swift2使所有字典键失败并出现错误

时间:2015-06-24 06:29:26

标签: ios nsdictionary swift2

我在获取Dictionary的一系列密钥时遇到了一些问题 - 这将在UITableView数据模型中使用

对于顶级表格,我希望计数为3,密钥为:GMRS,IRLP和WinSystem

代码:

let rows = repeaterInfoDict.count // 3
let keyArray = repeaterInfoDict.allKeys // Error: [String:[String:[String:Any]]] does not have a member named 'allKeys'

.count收到3,但.allKeys错误地输出了Xcode错误:[String:[String:[String:Any]]]没有名为'allKeys'的成员

字典上的一些细节:

repeaterInfoDict定义:

var repeaterInfoDict = String:[String:[String:Any]]

AWS CognitoSync完成同步后字典的样子:

控制台:

print ("repeaterInfoDict: \(repeaterInfoDict)") - 添加了空白格式以便于查看。

repeaterInfoDict:

[
 GMRS: 
  [
   1121: [no: "San Jose,CA", pl: 0.0, lt: 37.33939, fq: 462.550, ln: -121.89496, ca: "WPUI299"], 
   1011: [no: "Napa,CA", pl: 0.0, lt: 38.29714, fq: 462.575, ln: -122.28553, ca: "wqbk788"], 
   1104: [no: "Palmdale,CA", pl: 0.0, lt: 34.57943, fq: 462.65, ln: -118.11646, ca: "WQHR999"]
  ], 
 IRLP: 
  [
    1121: [no: "St. Andrews,MB", pl: 127.3, lt: 114.3245, fq: 0.62, ln: 33.2345, ca: "VE4COR"],
    1011: [no: "Birken,BC", pl: 100.0, lt: 114.3245, fq: 147.0, ln: 33.2345, ca: "VA7IP"],
    1104: [no: "Saskatoon,SK", pl: 100.0, lt: 52.11679, fq: 446.1, ln: -106.63452, ca: "VE5RNP"]
  ], 
 WinSystem: 
  [
    1121: [no: "Los Angeles,CA", pl: -100.0, lt: 34.05223, fq: 448.06, ln: -118.24368, ca: "K6JSI"],
    1011: [no: "Escondido,CA", pl: -100.0, lt: 33.11921, fq: 449.08, ln: -117.08642, ca: "K6JSI"],
    1104: [no: "San Diego,CA", pl: -100.0, lt: 32.71533, fq: 447.64, ln: -117.15726, ca: "K6JSI"]
  ]
]

print ("repeaterInfoDict.count: \(repeaterInfoDict.count)")
repeaterInfoDict.count: 3
  1. 在第一级表格中,我预计有3行和密钥:GMRS,IRLP,WinSystems
  2. 在IRLP的第二级表中,我期望3行和键:1121,1011,1104
  3. 在1121的第三级表中,我希望格式化Dictionary [no:“Los Angeles,CA”,pl:-100.0,lt:34.05223,fq:448.06,ln: -118.24368,ca:“K6JSI”]进入自定义单元格/视图
  4. 在此嵌套Dictionary

    中获取密钥的正确/最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

我猜你不需要在一个阵列中完成所有这些操作。然后,我建议您使用从keys属性(而不是allKeys)收到的密钥来遍历项目。

for key in dictionary.keys {
    for nestedKey in dictionary[key].keys {
        for nested2Key in dictionary[key][nestedKey].keys {
            // use the keys
        }
    }
}

请记住,这不会像您输入的那样排序,Dictionary不存储订单。

答案 1 :(得分:1)

替换:

let keyArray = repeaterInfoDict.allKeys

使用:

let keyArray = repeaterInfoDict.keys.array

现在当我print("** keyArray: \(keyArray)")时,我得到了:

** keyArray: [GMRS, IRLP, WinSystem]

我不知道为什么repeaterInfoDict.allKeys没有返回此数组。

有更好的解决方案吗?