我可以在swift中使用for循环中的'where'吗?

Sim*_*mon 40 for-loop where where-clause for-in-loop swift

是否有可能在另一个地方使用'where'关键字然后转换?我可以在for循环中使用它吗?

我有一个bools数组,都有一个值,我可以做这样的事情:

var boolArray: [Bool] = []

//(...) set values and do stuff


for value where value == true in boolArray {
   doSomething()
}
Run Code Online (Sandbox Code Playgroud)

这比使用if要好得多,所以我想知道是否有可能在for循环中使用where.Ty适合你的时间.

Ben*_*aum 92

在Swift 2中,where添加了新语法:

for value in boolArray where value == true {
   ...
}
Run Code Online (Sandbox Code Playgroud)

在Pre 2.0中,一个解决方案是.filter在迭代它之前调用数组:

for value in boolArray.filter({ $0 == true }) {
   doSomething()
}
Run Code Online (Sandbox Code Playgroud)

  • 好的解决方案 但是对于样式,我建议*不*使用尾随闭包语法 - 这样更清楚哪个大括号是`for`循环的主体:`for boolArray.filter中的值({$ 0 == true}) {doSomething()}` (2认同)

Sun*_*rma 7

法线for-loop将迭代列表中存在的所有元素。但有时我们只想在数据满足某些条件时才进行迭代,在那里我们可以使用where子句 with for -loop。它只是if循环内条件的替换。

例如:

let numbers = [1,2,3,4,5,6,7]
for data in numbers {
    if (data % 2 == 0) {
        print(data)
    }
}
Run Code Online (Sandbox Code Playgroud)

可以用更简单的方式重写为:

for data in numbers where data % 2 == 0 {
    print(data)
}
Run Code Online (Sandbox Code Playgroud)