【问题标题】:How to create and access a NSDictionary in Swift如何在 Swift 中创建和访问 NSDictionary
【发布时间】:2014-10-02 22:06:52
【问题描述】:

我正忙于转换为 Swift 并试图弄清楚如何在 Swift 中执行以下操作

NSArray arrayOfStrings1 = {@"Substring1", @"Substring2", nil};

Dictionary dict = {@"MainString1", arrayOfStrings1};

所以在 Swift 中我有以下内容:

var dictionary = [String: Array<String>]()  // is this correct ??
var array: [String] = ["Substring1", "Substring2"]


dictionary["MainString1"] = ["Substring1.1", "Substring1.2"]
dictionary["MainString2"] = ["Substring2.1", "Substring2.2"]

现在为了访问我使用的数组

let array = dictionary["MainString1"]

let item0 = array[0]

但这会失败并出现编译器错误,这似乎表明数组实际上是一个字符串而不是字符串数组。

我在这里错过了什么?

【问题讨论】:

  • 如果您不想拼出Array,可以将dictionary 声明为[String: [String]]

标签: ios arrays dictionary swift


【解决方案1】:

问题实际上是在 Swift 中对 Dictionary 的下标查找返回一个 可选 值:

这是一个非常棒的功能 - 您无法保证您要查找的键一定对应于某个值。所以 Swift 确保知道你可能不会从你的查找中得到一个值。

这与Array 的下标行为略有不同,Array 总是返回一个值。这是一个语义驱动的决定 - 如果没有键,字典查找在语言中很常见返回 null - 但是如果您尝试访问不存在的数组索引(因为它超出范围),则会出现异常被抛出。这就是 Swift 保证你会从数组下标中返回一个值的方式:要么你会得到一个值,要么你必须捕获一个异常。字典稍微宽松一点——它们“习惯于”没有你所要求的价值。

因此,您可以使用 可选绑定 仅在项目实际具有值时才使用它,如下所示:

if let theArray = dictionary["MainString1"] {
    let item0 = theArray[0]
} else {
    NSLog("There was no value for key 'MainString1'")
}

【讨论】:

  • All nice with out-of-bounds array access except 异常不支持可恢复错误。但是 Swift 应该可以防止崩溃,而可选项是做到这一点的一种方法!
  • @Zaph 你是说你希望看到Array 的下标行为返回一个可选值吗? (如果是这样,我同意。)
  • @CraigOtis 是的。否则,必须在访问之前检查数组的项目计数,这本质上是“旧样式”,可能无法完成。
  • @Zaph 在这种情况下,您可能会喜欢我的另一个问题。 :-) stackoverflow.com/questions/25329186/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多