swift 2.1语言参考说明for-in循环可以包含where子句。使用where子句的for-in循环的语义是什么?
编辑:要明确我在公共论坛上提问,以便可以解决快速语言的语义问题。 swift引用是不完整的,虽然可以通过使用代码来观察其语义,但是为社区提供有关其行为的文档来源符合社区的最佳利益。
答案 0 :(得分:2)
以下是两个如何使用它的简单示例。
让我们假设你有两个不同的结构人和地址声明如下:
struct Address {
let country: String?
}
struct Person {
let name: String
let address: Address?
}
let people = [
Person(name: "Jack", address: nil),
Person(name: "John", address: Address(country: "Finland")),
Person(name: "Jill", address: Address(country: "Nepal"))
]
对于第一个示例,您只能迭代符合以下某些条件的那些
for aPerson in people where aPerson.name == "Jack" {
print(aPerson)
}
请注意,address是可选的,您仍然可以使用where子句来评估可选,并仅迭代这样的情况,
for aPerson in people where aPerson.address?.country == "Finland" {
print(aPerson)
}
以下是关于数字的其他简单例子,
let numbers = Array(1...100)
for number in numbers where number % 2 == 0 {
print(number) // prints all even numbers
}
答案 1 :(得分:1)
如果您对语法感到好奇,可以使用一个简单的例子:
let numbers = [1, 42, 18, 73, 0]
for number in numbers where number > 20 {
print(number)
}
打印:
42
73
使用where
子句,在循环时,代码将跳过与子句不匹配的对象。
答案 2 :(得分:1)
从您链接的页面可以看出,带有where子句的for-in循环的语法是这样的:
for-in-statement→ for case opt pattern in expression where-clause opt 代码块
因此,您可以使用它来循环具有条件的数组。例如,您可以这样做:
for element in array where element.someBoolValue {
print(element)
}
而不是
for element in array {
if element.someBoolValue {
print(element)
}
}
另一种可视化方式是:
for element in array.filter({$0.someBoolValue}) {
print(element)
}
所有这些例子在功能上都相同。
我希望你能理解现在如何更好地构建for-in循环。
答案 3 :(得分:0)
您是否在询问它是如何运作的?它只对通过where where的值执行代码块。
这些做同样的事情(有一个例外):
//1
for value in boolArray.filter({ $0 == true }){
print(value)
}
//2
for value in boolArray where value == true {
print(value)
}
第二个选项更快 - 多少 - 这取决于您的数据。经过一些测试,第二个选项相当于:
//3
for value in boolArray {
if value == true {
print(value)
}
}