swift 2.1語言參考說明for-in循環可以包含where子句。什麼是使用where子句的for-in循環的語義?swift中for-in循環中where子句的語義是什麼?
編輯:要清楚,我要求在一個公開論壇,以便迅速語言的語義可以得到解決。快速參考是不完整的,雖然它的語義可以通過使用代碼來觀察,但爲社區提供文檔來源是最符合社區利益的。
swift 2.1語言參考說明for-in循環可以包含where子句。什麼是使用where子句的for-in循環的語義?swift中for-in循環中where子句的語義是什麼?
編輯:要清楚,我要求在一個公開論壇,以便迅速語言的語義可以得到解決。快速參考是不完整的,雖然它的語義可以通過使用代碼來觀察,但爲社區提供文檔來源是最符合社區利益的。
下面是你如何使用它兩個簡單的例子。
讓我們假設你有兩個不同的結構人和地址聲明如下:
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
}
如果你好奇的語法,一個簡單的例子是:
let numbers = [1, 42, 18, 73, 0]
for number in numbers where number > 20 {
print(number)
}
打印:
隨着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)
}
}
正如你鏈接的頁面上可以看到,語法對換與循環where子句是像這樣:
換的語句→爲情況選擇模式在表達where子句選擇碼塊
所以也可以用它來循環在符合條件的陣列。例如,你可以這樣做:的
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循環如何構造得更好。