2016-08-11 79 views
1

我有一個關於我的嵌套字典的問題。如何檢查值是在嵌套字典內swift

var level1Dictionary = [String : [String : String]]() 
var ChosenDeckLabel = [String] 
textview.text 

我想看看如果字典包含這樣我的,else if語句中的某個值:

else if level1Dictionary[ChosenDeckLabel[textview.text]] != nil { 

這將返回錯誤:

Cannot subscript value of type String with an index of type String!

我應該如何將其轉換爲檢查嵌套字典是否包含值?

+0

給出的錯誤在哪裏?你能給我們一些樣本數據輸入和你期望的輸出嗎? – Alexander

回答

1

我覺得這是你打算做什麼:

else if level1Dictionary[strIndex1][strIndex2] != nil {

+0

哈哈:)是啊,謝謝,我用它都錯了。所有的答案非常感謝! –

2

字典和默認自選,因爲他們不知道,如果一個鍵/值對存在。一定要包括你的「!」和「?」包裝和解包您傳遞的數據。

1

當你這樣做:

level1Dictionary[ChosenDeckLabel[textview.text]] 

您嘗試使用String下標來訪問ChosenDeckLabelarray

ChosenDeckLabel[textview.text] 

這不是一個有效的操作。數組是Int索引,而不是字符串索引。

public subscript (index: Int) -> Element 
public subscript (subRange: Range<Int>) -> ArraySlice<Element> 

你試圖通過其引發錯誤的字符串下標:如看到斯威夫特的API

+0

打我吧:'( – PeejWeej

+0

@PEEJWEEJ;)大聲笑 – gravicle

2

陣列提供通過整數和範圍下標。您需要獲取數組中元素的索引,然後使用它來爲數組下標以獲取值:例如

let dictOfDicts = [String : [String : String]]() 
var arrayOfStrings: [String] = ["a", "b", "c"] 
let stringToCheck = "a" 

dictOfDicts["a"] = ["some": "thing"] 

if let index = array.indexOf(stringToCheck) { 
    if dictOfDicts[array[Int(index)]] != nil { 
     // do something 
    } 
}