如何检查任何对象类型的二维数组是否包含 swift 中的内容

how to check if a 2D array of type any object contains something in swift

我有一个声明为 var cellitemcontent:[[AnyObject]] = []

的二维数组

我在其中存储了一个字符串和布尔值([apple, false; banana, false; egg, true])

当我尝试查看 cellitemcontent 是否包含任何错误值时,我会这样做:

if cellitemcontent[0][1] as Bool == false {} //fatal error: Cannot index empty buffer

或者如果我尝试:

if contains((cellitemcontent[0][1] as Bool), false) {} //Type 'Bool' does not conform to protocol 'SequenceType'

P.S:我将它作为 AnyObject 而不是元组的原因是因为我将其保存到 NSUserDefaults 并且我被告知您不能在默认值中保存元组。

永远不要将 Bool 类型与 true 进行比较。这是多余的。你可以简单地做:

if (cellitemcontent[0][1] as Bool) {
    // your code
}

或者如果你想检查它是否是错误的,只需在它前面添加一个感叹号:

if !(cellitemcontent[0][1] as Bool) {
    // your code
}

//

var cellitemcontent:[[AnyObject]] = []

cellitemcontent.append(["apple", false])
cellitemcontent.append(["banana", false])
cellitemcontent.append(["egg", true])

for index in 0..<cellitemcontent.count {
    if !(cellitemcontent[index][1] as Bool) {
        println("is false")   // (2 times)
    } else {
        println("is true")    // (1 time)
    }
}

您还可以 map cellItemContents 到仅包含 Bool 值的数组 - 新数组的索引将与原始数组的索引匹配:

let bools = cellItemContents.map { [=10=][1] as Bool }

使用 [[apple, false], [banana, false], [egg, true]] 的原始数组,你会得到一个新数组 [false, false, true],你可以用它做任何你想做的事情:

println(contains(bools, false))  // prints "true"

除非您对二维数组有特殊需求,否则使用字典可能会更轻松:

let myDict = ["apple": false, "banana": false, "egg": true]

if myDict["apple"]! {
    println("The food is an apple.")
} else {
    println("The food is not an apple.") // Prints
}

if myDict["banana"]! {
    println("The food is an apple.")
} else {
    println("The food is not an apple.") // Prints
}

if myDict["egg"]! {
    println("The food is an apple.") // Prints
} else {
    println("The food is not an apple.")
}

为了回答你在另一条评论中的问题,重复这样:

for (food, value) in myDict {

    println("The \(food) is \(value)")
}