2014-10-02 96 views
1

我忙轉換爲斯威夫特訪問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

回答

2

這個問題實際上是在斯威夫特一個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