如何检查任何对象类型的二维数组是否包含 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)")
}
我有一个声明为 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)")
}