如何检查值是嵌套字典swift内部

时间:2016-08-11 21:46:20

标签: arrays swift dictionary

我的嵌套词典存在问题。

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

我想查看字典是否在我的else if语句中包含某个值:

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

这会返回错误:

  

不能使用String类型索引的String类型的下标值!

我应该如何转换它以检查嵌套字典是否包含值?

4 个答案:

答案 0 :(得分:2)

默认情况下,词典是选项,因为它们不确定是否存在键/值对。一定要包含你的"!" AND"?"包装和解包传递的数据。

答案 1 :(得分:2)

Arrays通过整数和范围提供下标,如Swift的API所示:

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

您尝试通过抛出错误的字符串下标。您需要获取数组中元素的索引,然后使用它来下标数组以获取值:例如

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
    }
}

答案 2 :(得分:1)

我认为这是你打算做的事情:

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

答案 3 :(得分:1)

当你这样做时:

level1Dictionary[ChosenDeckLabel[textview.text]]

您正尝试使用ChosenDeckLabel下标来访问array String

ChosenDeckLabel[textview.text]

这不是有效的操作。数组被Int编入索引,而不是字符串索引。