如何创建和斯威夫特
我忙转换为斯威夫特访问NSDictionary中,我试图找出如何做斯威夫特如何创建和斯威夫特
以下NSArray arrayOfStrings1 = {@"Substring1", @"Substring2", nil};
Dictionary dict = {@"MainString1", arrayOfStrings1};
所以在斯威夫特我有以下几点:
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]
的数组,但这个失败,这似乎表明THA编译错误t数组实际上是一个String而不是一个字符串数组。
我在这里错过了什么?
这个问题实际上是在斯威夫特一个Dictionary
标查找返回可选值:
这是一个非常伟大的功能 - 你不能保证,关键你'寻找必然对应的价值。所以斯威夫特确保你你知道你可能没有从你的查询中获得价值。
这与Array
的下标行为有一点不同,它会始终返回一个值。这是一个语义驱动的决定 - 如果没有密钥,字典查找语言中返回null
是常见的 - 但如果尝试访问不存在的数组索引(因为它超出范围),将引发异常。这就是Swift保证你会从数组下标得到一个值的方法:要么你会得到一个,要么你必须捕获一个异常。字典稍微宽松 - 它们“习惯于”没有你要求的价值。
其结果是,你可以使用可选结合只使用项目,如果它实际上有一个值,像这样:
if let theArray = dictionary["MainString1"] {
let item0 = theArray[0]
} else {
NSLog("There was no value for key 'MainString1'")
}
丁!真棒,谢谢 – 2014-10-02 22:22:22
所有不错的超出界限数组访问**除了**异常不支持可恢复错误。但斯威夫特应该防止崩溃和可选项是一种方法来做到这一点! – zaph 2014-10-02 22:39:41
@Zaph你是说你希望看到'Array'的下标行为返回一个可选项? (如果是这样,我同意。) – 2014-10-03 10:11:23
你可以声明'dictionary'成为'[字符串:字符串]]'如果你不想拼出'Array'。 – 2014-10-02 22:24:26