就像Unheilig 写的 enumerate 正在返回一个序列类型。
您还可以删除 enumerate 调用,我认为这会使您的案例中的代码更具可读性,如下所示:
var numTrue = 0
var numFalse = 0
var boolArray = [true, true, false, true]
for index in boolArray {
if index == false{
numFalse++
} else {
numTrue++
}
}
print("Count true: \(numTrue)")
print("Count false: \(numFalse)")
编辑 1:快速帮助文档
下次如果您有类似的问题或错误弹出,您还可以使用快速帮助文档,方法是按住 alt 并将鼠标悬停在方法上,然后会出现问号,您可以单击该方法。将打开一个窗口,其中包含该方法的描述,有时还会打开一个示例,例如 enumerate()。请看下面的截图:
编辑 2:改进的解决方案
Swift 在您的情况下为集合提供方法,以减少代码量。
在您的情况下,您可以使用方法 filter() 通过过滤掉调用它的数组中的元素来返回一个新数组。唯一的参数是一个闭包(阅读更多关于闭包here),它返回一个布尔值,它将为数组中的每个元素执行一次这个闭包。
Swift 自动为内联闭包提供简写参数名称,可用于通过名称 $0, $1, $2 等(来自文档)引用闭包参数的值。
所以在你的情况下,$0 代表从索引 0 开始的每个元素。
count 返回数组中元素的数量,因此在您的情况下,使用 filter 它仅返回 3,因为 true 出现 3 次。 trueCounter = 3
对于falseCounter,您可以轻松地从boolArray.count 中减去trueCounter 的结果,即falseCounter = 4 - 3 -> 1
var boolArray = [true, true, false, true]
let trueCounter = boolArray.filter({$0 == true}).count
let falseCounter = boolArray.count - trueCounter
print("Count true: \(trueCounter)") // Count true: 3
print("Count false: \(falseCounter)") // Count false: 1