如何在Swift中创建和访问NSDictionary

时间:2014-10-02 22:06:53

标签: ios arrays dictionary swift

我正忙着转换到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]

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

我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

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

enter image description here

这是一个非常棒的功能 - 您无法保证您正在寻找的密钥必然与某个值相对应。因此,Swift确保知道您可能无法从查找中获得值。

这与Array的下标行为略有不同,后者将始终返回一个值。这是一个语义驱动的决定 - 如果没有密钥,字典查找返回null的语言很常见 - 但是如果你试图访问不存在的数组索引(因为它&#39) ; s超出范围),将抛出异常。这就是Swift如何保证你从数组下标中获取一个值:要么你得到一个,要么你必须捕获异常。字典稍微宽松一点 - 他们已经习惯了#34;没有你要求的价值。

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

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