我正忙着转换到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而不是一个字符串数组。
我在这里缺少什么?
答案 0 :(得分:3)
问题实际上是Swift中Dictionary
的下标查找返回可选值:
这是一个非常棒的功能 - 您无法保证您正在寻找的密钥必然与某个值相对应。因此,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'")
}