Swift for-in 循環(huán)

在本文中,您將了解for-in循環(huán),其使用示例和變體。

for-in 循環(huán)用于在一定時間內(nèi)運行一組任務(wù)。這些循環(huán)遍歷任何序列,例如數(shù)組中的項、范圍或字符串中的字符。

我們還使用for-in循環(huán)在固定的時間內(nèi)執(zhí)行一些重復(fù)的過程。

為什么需要for-in循環(huán)?

想象一下,有人告訴您要編寫一個在屏幕上,輸出Hello,World的程序!  您的解決方案將是:

print("Hello, World!")

如果他們改變主意并告訴您編寫一個在屏幕上輸出Hello,World顯示五次的程序,該怎么辦?。如果沒有循環(huán)知識,您的解決方案可能是:

print("Hello, World!")
print("Hello, World!")
print("Hello, World!")
print("Hello, World!")
print("Hello, World!")

嗯 ,完成五次相似的代碼來完成相同的工作看起來很耗時。如果是這樣,如果有人要求您編寫一個輸出Hello,World!的程序,在屏幕上數(shù)百甚至上百萬次?您將怎么辦?

一種幼稚的解決方案是編寫print給定次數(shù)的語句。聽起來很瘋狂吧?但是,通過使用for-in循環(huán)的幾行代碼,可以找到更好的解決方案:

for i in 1...100 {
	//在屏幕上輸出Hello World 100次
	print("Hello, World!")
}

不用擔心語法,我們將在下面進行探討。

For-in循環(huán)語法

您可以在Swift中創(chuàng)建for in循環(huán),如下所示:

for <value> in <range> {
	<some work here>
}

上面的循環(huán)遍歷一個范圍,我們可以在<value>變量中訪問從該范圍返回的每個元素。 如果您不了解范圍,可以查看以下文章:Swift Ranges。

它是如何工作的?

  • 被迭代的序列是一個<range>。

  • 將 <value> 設(shè)置為范圍內(nèi)的第一個數(shù)字,并執(zhí)行循環(huán)內(nèi)的語句 < 此處的某些工作 >

  • 語句執(zhí)行后,<value>被更新為包含<range>中的第二個值,并且語句 <此處的某些工作> 再次被執(zhí)行。

  • 該過程一直持續(xù)到到達范圍的終點并停止循環(huán)。

示例1:for-in循環(huán)在Swift中的工作方式

for i in 1...3 {
	print("Hello world!. Value is \(i)")
}

運行該程序時,輸出為:

Hello world!. Value is 1
Hello world!. Value is 2
Hello world!. Value is 3

在上面的程序中,要迭代的序列的范圍是1到3。

i 的值設(shè)置為范圍(1)中的第一個數(shù)字,并在每次迭代中更新為范圍的下一個數(shù)字。這個過程一直持續(xù)到范圍(3)的結(jié)束。

循環(huán)內(nèi)執(zhí)行步驟
迭代

從范圍(i)返回的值

輸出
11Hello world!. Value is 1
22Hello world!. Value is 2
33Hello world!. Value is 3

在for-in循環(huán)中舍棄范圍值

如果循環(huán)內(nèi)沒有使用范圍值,則可以在Swift中使用(下劃線 _)丟棄,如下所示:

for _ in <range> {
	<some work here>
}

示例2:在for-in循環(huán)中丟棄范圍值

//本示例忽略值并使用半開范圍運算符
for _ in 1..<3 {
	print("Hello world!")
}

運行該程序時,輸出為:

Hello world!
Hello world!

在上面的程序中,由于使用半開范圍運算符(.. <),所以要遍歷的序列的范圍是1到2,其中包括下限(1)但不包括上限(3)。

下劃線 _ 忽略范圍(1)中的值,并執(zhí)行print語句。 再次調(diào)用print語句進行下一次迭代,并且過程結(jié)束,因為2是該范圍內(nèi)的最后一個值。

不帶范圍值的for-in循環(huán)執(zhí)行步驟
迭代從范圍返回的值輸出
1丟棄Hello world!
2丟棄Hello world!

使用固定間隔的for-in循環(huán)

如果要使循環(huán)在每次迭代中以某個固定值(而不是范圍)遞增,則必須使用stride方法。

示例3:使用stride的for-in循環(huán)

let interval = 2
for i in stride(from: 1, to: 10, by: interval) {
	print(i)
}

運行該程序時,輸出為:

1
3
5
7
9

在上面的程序中,該stride函數(shù)返回數(shù)字序列:1、3、5、7、9。

i的值設(shè)置為序列(1)的第一個數(shù)字,并執(zhí)行循環(huán)內(nèi)的print語句,該語句在控制臺中輸出“ 1”。

執(zhí)行該語句后,將i的值更新為另一個值(3),并再次調(diào)用print語句。該過程一直持續(xù)到訪問序列中的所有元素為止。

使用 stride 執(zhí)行循環(huán)內(nèi)執(zhí)行步驟
條件(Value < End)i (輸出)
11 < 10 (true)1
1 + 2 = 33 < 10 (true)3
1 + 2 * 2 = 55 < 10 (true)5
1 + 3 * 2 = 77 < 10 (true)7
1 + 4 * 2 = 99 < 10 (true)9
1 + 5 * 2 = 1111 < 10 (false)Stops

如何使用for-in循環(huán)訪問集合的元素?

假設(shè)您有一個字符串數(shù)組,如下所示。如果您不了解數(shù)組,可以將數(shù)組視為可以存儲多個值的單個容器。有關(guān)更多詳細說明,請參見Swift 數(shù)組

let programmingLanguages = ["Swift", "Java", "Go","JavaScript","Kotlin","Python"]

如果有人告訴您打印所有編程語言該怎么辦?

一種方法是使用索引值 programmingLanguages[0], programmingLanguages[1]... 來訪問這些元素,依此類推,直到獲得所有元素。但這太繁瑣了。

所以循環(huán)派上用場了。您可以使用for in循環(huán)進行迭代:

示例4:使用for-in循環(huán)訪問數(shù)組(集合)的元素

let programmingLanguages = ["Swift", "Java", "Go", "JavaScript", "Kotlin", "Python"]
for language in programmingLanguages {
      print(language)
}

運行該程序時,輸出為:

Swift
Java
Go
JavaScript
Kotlin
Python

在上面的程序中,要迭代的序列是一個字符串數(shù)組。

language 的值設(shè)置為數(shù)組的第一個元素,并執(zhí)行循環(huán)內(nèi)的print語句,該語句在控制臺中輸出“ Swift”。

語句執(zhí)行后,language 將使用數(shù)組的下一個元素進行更新,并再次調(diào)用print語句。這個過程一直持續(xù)到訪問數(shù)組的最后一個元素為止。

示例5:使用for-in循環(huán)訪問字符串(集合)的元素

由于在Swift中字符串也是集合,因此您可以使用for循環(huán)訪問字符串中的每個字符。

for value in "I?Swift!" {
	print(value)
}

運行該程序時,輸出為:

I
?
S
w
i
f
t
!

如何使用for-in循環(huán)訪問集合的索引?

如果要訪問數(shù)組的索引(數(shù)組中元素的位置,即0、1、2),則需要使用 enumerated 方法:

示例6:使用for-in循環(huán)訪問數(shù)組的索引

let programmingLanguages = ["Swift", "Java", "Go", "JavaScript", "Kotlin", "Python"]
for (index, language) in programmingLanguages.enumerated() {
      print("\(index):\(language)")
}

運行該程序時,輸出為:

0:Swift
1:Java
2:Go
3:JavaScript
4:Kotlin
5:Python

在此,枚舉方法返回數(shù)組中每個項目的由索引(Int)和值(String)組成的元組(Int, String)。例如:(0,Swift),(1,Java)

使用 for-in 循環(huán),您可以逐個訪問元組中的這些項。如果您不知道 Tuple(元組),那么您可以簡單地將它看作一個容器,它可以容納不同類型的值。

如何在for-in循環(huán)中使用where子句過濾元素?

您還可以使用where子句將for循環(huán)中的內(nèi)容過濾掉

for value in "I?Swift!" where value != "!" {
	print(value) //刪除感嘆號
}

運行該程序時,輸出為:

I
?
S
w
i
f
t

在上面的程序中,要迭代的序列是字符串(字符集合)。

value 設(shè)置為字符串的第一個字符,并使用where條件進行檢查。如果條件返回true,則執(zhí)行循環(huán)內(nèi)的塊(打印語句),該塊在控制定臺中輸出“ I”。

語句執(zhí)行后,value 將更新為字符串的下一個字符,然后再次檢查條件。如果條件返回 false,則不執(zhí)行該塊,value 并更新為下一個字符。

該過程一直持續(xù)到訪問字符串的最后一個字符為止。

使用for-in循環(huán)執(zhí)行步驟進行過濾
迭代valuevalue != “!”輸出
1ItrueI
2?true?
3StrueS
4wtruew
5itruei
6ftruef
7ttruet
8!false
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清