我正忙于转换为 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]
但这会失败并出现编译器错误,这似乎表明该数组实际上是一个字符串而不是字符串数组。
我在这里缺少什么?
最佳答案
问题实际上是 Swift 中 Dictionary
的下标查找返回一个可选值:
这是一个非常棒的功能 - 你不能保证你正在寻找的键一定对应于一个值。因此,Swift 确保您知道您可能无法从查找中获得值。
这与 Array
的下标行为略有不同,后者始终返回一个值。这是一个语义驱动的决定 - 在语言中,如果没有键,字典查找返回 null 是很常见的 - 但如果您尝试访问不存在的数组索引(因为它超出了范围) ),将会抛出异常。这就是 Swift 保证您将从数组下标返回值的方式:要么获得一个值,要么必须捕获异常。字典稍微宽松一些 - 它们“习惯”不具有您所要求的值。
因此,您可以使用可选绑定(bind)仅在项目实际具有值时才使用该项目,如下所示:
if let theArray = dictionary["MainString1"] {
let item0 = theArray[0]
} else {
NSLog("There was no value for key 'MainString1'")
}
关于ios - 如何在 Swift 中创建和访问 NSDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26170399/