如何创建和斯威夫特

如何创建和斯威夫特

问题描述:

我忙转换为斯威夫特访问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而不是一个字符串数组。

我在这里错过了什么?

+1

你可以声明'dictionary'成为'[字符串:字符串]]'如果你不想拼出'Array'。 – 2014-10-02 22:24:26

这个问题实际上是在斯威夫特一个Dictionary标查找返回可选值:

enter image description here

这是一个非常伟大的功能 - 你不能保证,关键你'寻找必然对应的价值。所以斯威夫特确保你知道你可能没有从你的查询中获得价值。

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

其结果是,你可以使用可选结合只使用项目,如果它实际上有一个值,像这样:

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

丁!真棒,谢谢 – 2014-10-02 22:22:22

+0

所有不错的超出界限数组访问**除了**异常不支持可恢复错误。但斯威夫特应该防止崩溃和可选项是一种方法来做到这一点! – zaph 2014-10-02 22:39:41

+0

@Zaph你是说你希望看到'Array'的下标行为返回一个可选项? (如果是这样,我同意。) – 2014-10-03 10:11:23