【问题标题】:Reach dictionary data within dictionary获取字典中的字典数据
【发布时间】:2015-06-17 13:35:25
【问题描述】:

如何在 Swift 中获取以下字典中的第二个整数(键)?而且,在这期间,我将如何访问第二个字典中的字符串?

var activeCustomers = Dictionary<Int, Dictionary<Int, Dictionary<String, String>>>()

我尝试编写(例如) var test: Int = activeCustomers[1][1] 但这不起作用。它说字典没有一个名为下标的成员。

【问题讨论】:

  • 你试过activeCustomers[1]?[1]吗?字典下标返回可选项(与数组下标相反)。

标签: swift dictionary


【解决方案1】:

问题是通过下标访问Dictionary,会返回Optional。您需要先打开它。

在 Playground (Swift 1.2) 上测试此代码有效:

var activeCustomers = Dictionary<Int, Dictionary<Int, Dictionary<String, String>>>()
var d1 = ["a": "b", "c": "d"]
var d2 = [1: d1]
activeCustomers = [1: d2]
if let d3 = activeCustomers[1] {
    var d4 = d3[1]
}

或者,如果您知道该键存在于字典中,则可以避免 if let 并直接解包可选

var d4 = activeCustomers[1]?[1]

【讨论】:

  • 感谢您提供的信息丰富的回答。 :) 不过,我将如何获取 密钥(第二个整数),将其存储在变量中以备后用。例如:Dictionary>>,我如何得到整数:62?
  • 实际上,我遇到了一个更令人警觉的问题。 pastebin.com/dLkfiAGw 使用该代码打开可选值时出现错误 - 为什么?我该如何解决这个问题,我是否正确访问(填充的)activeCustomers 字典?
  • @Tice 如果值为 nil,则无法解开该值。这就是为什么if let 是解开它的最佳方式。这就是您的应用崩溃的原因。
  • @Tice 在您的字典中没有值为indexPath.row 的键。将它记录到控制台并检查您期望的所有键是否都在那里(记住indexPath.row 是零索引的)。如果是这样,请确保您在 tableView:numberOfRowsInSection:(或它的名称)中返回了正确数量的单元格。
  • @HAS 在我的例子中, indexPath.row 值实际上代表了字典中的第一个键。不过,感谢您提供有关 indexPath.row 为零索引的提示-更改了我的代码以解决该问题!为了我的代码工作,我选择通过 if 语句打开我的字典。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 2019-05-27
  • 1970-01-01
  • 2013-08-22
  • 2018-12-04
  • 2016-05-27
  • 2015-03-18
相关资源
最近更新 更多