亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

Swift教程之控制流詳解

2020-03-09 17:51:20
字體:
供稿:網(wǎng)友
這篇文章主要介紹了Swift教程之控制流詳解,本文詳細(xì)講解了Swift中的for循環(huán)、for-in循環(huán)、For-Condition-Increment條件循環(huán)、while循環(huán)、Do-while循環(huán)、if條件語句等控制流語句,需要的朋友可以參考下
 

Swift提供了所有C語言中相似的控制流結(jié)構(gòu)。包括for和while循環(huán);if和switch條件語句;break和continue跳轉(zhuǎn)語句等。

Swift還加入了for-in循環(huán)語句,讓編程人員可以在遍歷數(shù)組,字典,范圍,字符串或者其它序列時(shí)更加便捷。

相對(duì)于C語言,Swift中switch語句的case語句后,不會(huì)自動(dòng)跳轉(zhuǎn)到下一個(gè)語句,這樣就避免了C語言中因?yàn)橥沚reak而造成的錯(cuò)誤。另外case語句可以匹配多種類型,包括數(shù)據(jù)范圍,元組,或者特定的類型等。switch語句中已匹配的數(shù)值也可以被用在后續(xù)的case語句體中,where關(guān)鍵詞還能被加入任意的case語句中,來增加匹配的方式。

1、for循環(huán)

for循環(huán)可以根據(jù)設(shè)置,重復(fù)執(zhí)行一個(gè)代碼塊多次。Swift中提供了兩種for循環(huán)方式:
for-in循環(huán),對(duì)于數(shù)據(jù)范圍,序列,集合等中的每一個(gè)元素,都執(zhí)行一次
for-condition-increment,一直執(zhí)行,知道一個(gè)特定的條件滿足,每一次循環(huán)執(zhí)行,都會(huì)增加一次計(jì)數(shù)

for-in循環(huán)

下面的例子打印出了5的倍數(shù)序列的前5項(xiàng)

 

復(fù)制代碼代碼如下:
 
for index in 1...5 {
println("/(index) times 5 is /(index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25

 

迭代的項(xiàng)目是一個(gè)數(shù)字序列,從1到5的閉區(qū)間,通過使用(…)來表示序列。index被賦值為1,然后執(zhí)行循環(huán)體中的代碼。在這種情況下,循環(huán)只有一條語句,也就是打印5的index倍數(shù)。在這條語句執(zhí)行完畢后,index的值被更新為序列中的下一個(gè)數(shù)值2,println函數(shù)再次被調(diào)用,一次循環(huán)直到這個(gè)序列的結(jié)尾。

在上面的例子中,index在每一次循環(huán)開始前都已經(jīng)被賦值,因此不需要在每次使用前對(duì)它進(jìn)行定義。每次它都隱式地被定義,就像是使用了let關(guān)鍵詞一樣。注意index是一個(gè)常量。

注意:index只在循環(huán)中存在,在循環(huán)完成之后如果需要繼續(xù)使用,需要重新定義才可以。

如果你不需要序列中的每一個(gè)值,可以使用_來忽略它,僅僅只是使用循環(huán)體本身:

 

復(fù)制代碼代碼如下:
 
let base = 3
let power = 10
var answer = 1
for _ in 1...power {
answer *= base
}
println("/(base) to the power of /(power) is /(answer)")
// prints "3 to the power of 10 is 59049"

這個(gè)例子計(jì)算了一個(gè)數(shù)的特定次方(在這個(gè)例子中是3的10次方)。連續(xù)的乘法從1(實(shí)際上是3的0次方)開始,依次累乘以3,由于使用的是半閉區(qū)間,從0開始到9的左閉右開區(qū)間,所以是執(zhí)行10次。在循環(huán)的時(shí)候不需要知道實(shí)際執(zhí)行到第一次了,而是要保證執(zhí)行了正確的次數(shù),因此這里不需要index的值。

 

同理我們可以使用for-in來循環(huán)遍歷一個(gè)數(shù)組的元素

 

復(fù)制代碼代碼如下:
 
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
println("Hello, /(name)!")
}
// Hello, Anna!
// Hello, Alex!
// Hello, Brian!
// Hello, Jack!

 

在遍歷字典的時(shí)候,可以使用key-value對(duì)來進(jìn)行遍歷。每一個(gè)字典中的元素都是一個(gè)(key, value)元組,當(dāng)遍歷的時(shí)候,可以指定字段的key和value為一個(gè)特定的名稱,這樣在遍歷的時(shí)候就可以更好地理解和使用它們,比如下面例子中的animalName和legCount:

 

復(fù)制代碼代碼如下:
 
let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
println("/(animalName)s have /(legCount) legs")
}
// spiders have 8 legs
// ants have 6 legs
// cats have 4 legs

 

字典中的元素在遍歷的時(shí)候一般不需要按照插入的順序,因此不能保證遍歷字典的時(shí)候,元素是有序的。更多跟數(shù)組和字典相關(guān)的內(nèi)容可以參考:Collection Types

另外在數(shù)組和字典中也可以使用類似的遍歷方式,如可以使用for-in循環(huán)來遍歷字符串中的每一個(gè)字符:

 

復(fù)制代碼代碼如下:
 
for character in "Hello" {
println(character)
}
// H
// e
// l
// l
// o

 

For-Condition-Increment條件循環(huán)

Swift同樣支持C語言樣式的for循環(huán),它也包括了一個(gè)條件語句和一個(gè)增量語句:

 

復(fù)制代碼代碼如下:
 
for var index = 0; index < 3; ++index {
println("index is /(index)")
}
// index is 0
// index is 1
// index is 2

下面是這種for循環(huán)的一般結(jié)構(gòu):

 

 

復(fù)制代碼代碼如下:
 
for initialization; condition; increment {
statements
}

 

分號(hào)在這里用來分隔for循環(huán)的三個(gè)結(jié)構(gòu),和C語言一樣,但是不需要用括號(hào)來包裹它們。

這種for循環(huán)的執(zhí)行方式是:

1、當(dāng)進(jìn)入循環(huán)的時(shí)候,初始化語句首先被執(zhí)行,設(shè)定好循環(huán)需要的變量或常量

2、測試條件語句,看是否滿足繼續(xù)循環(huán)的條件,只有在條件語句是true的時(shí)候才會(huì)繼續(xù)執(zhí)行,如果是false則會(huì)停止循環(huán)。

3、在所有的循環(huán)體語句執(zhí)行完畢后,增量語句執(zhí)行,可能是對(duì)計(jì)數(shù)器的增加或者是減少,或者是其它的一些語句。然后返回步驟2繼續(xù)執(zhí)行。

這種循環(huán)方式還可以被描述為下面的形式:

 

復(fù)制代碼代碼如下:
 
initialization
while condition {
statements
increment
}

在初始化語句中被定義(比如var index = 0)的常量和變量,只在for循環(huán)語句范圍內(nèi)有效。如果想要在循環(huán)執(zhí)行之后繼續(xù)使用,需要在循環(huán)開始之前就定義好:

 

 

復(fù)制代碼代碼如下:
 
var index: Int
for index = 0; index < 3; ++index {
println("index is /(index)")
}
// index is 0
// index is 1
// index is 2
println("The loop statements were executed /(index) times")
// prints "The loop statements were executed 3 times"

 

需要注意的是,在循環(huán)執(zhí)行完畢之后,index的值是3,而不是2。因?yàn)槭窃趇ndex增1之后,條件語句index < 3返回false,循環(huán)才終止,而這時(shí),index已經(jīng)為3了。

2、while循環(huán)

while循環(huán)執(zhí)行一系列代碼塊,直到某個(gè)條件為false為止。這種循環(huán)最長用于循環(huán)的次數(shù)不確定的情況。Swift提供了兩種while循環(huán)方式:

while循環(huán),在每次循環(huán)開始前測試循環(huán)條件是否成立

do-while循環(huán),在每次循環(huán)之后測試循環(huán)條件是否成立

while循環(huán)

while循環(huán)由一個(gè)條件語句開始,如果條件語句為true,一直執(zhí)行,直到條件語句變?yōu)閒alse。下面是一個(gè)while循環(huán)的一般形式:

 

復(fù)制代碼代碼如下:
 
while condition {
statements
}

 

下面的例子是一個(gè)簡單的游戲,Snakes and Ladders,蛇和梯子:

Swift教程之控制流詳解

游戲的規(guī)則是這樣的:

游戲面板上有25個(gè)格子,游戲的目標(biāo)是到達(dá)第25個(gè)格子;

每個(gè)回合通過一個(gè)6面的骰子來決定行走的步數(shù),行走的路線按右圖所示;

如果落在梯子的底部,那么就爬上那個(gè)梯子到達(dá)另外一個(gè)格子;

如果落到蛇的頭部,就會(huì)滑到蛇尾部所在的格子。

游戲面板由一個(gè)Int數(shù)組組成,大小由一個(gè)常量設(shè)置finalSquare,同時(shí)用來檢測是否到達(dá)了勝利的格子。游戲面板由26個(gè)Int數(shù)字0初始化(不是25個(gè),因?yàn)閺?到25有26個(gè)數(shù)字)

 

復(fù)制代碼代碼如下:

let finalSquare = 25
var board = Int[](count: finalSquare + 1, repeatedValue: 0)

其中一些格子被設(shè)置為一些特定的值用來表示蛇或者梯子。有梯子的地方是整數(shù),而有蛇的地方是負(fù)數(shù):

 

 

復(fù)制代碼代碼如下:

board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02
board[14] = -10; board[19] = -11; board[22] = -02; board[24] = -08

第三個(gè)格子是一個(gè)梯子的底部,表示玩家可以通過梯子到達(dá)第11格,因此設(shè)置board[3]為+08,表示前進(jìn)8步。同理蛇的位置設(shè)置為負(fù)數(shù),表示后退i步。

 

玩家從為0的格子開始游戲。

復(fù)制代碼代碼如下:
 
var square = 0
var diceRoll = 0
while square < finalSquare {
// roll the dice
if ++diceRoll == 7 { diceRoll = 1 }
// move by the rolled amount
square += diceRoll
if square < board.count {
// if we're still on the board, move up or down for a snake or a ladder
square += board[square]
}
}
println("Game over!")

 

這個(gè)例子用到了一個(gè)非常簡單的擲骰子的方式,就是每次加1,而不是使用一個(gè)隨機(jī)數(shù)。diceRoll用來表示每次行走的步數(shù),需要注意的是,每次執(zhí)行前,++diceRoll都會(huì)先執(zhí)行加1,然后再與7比較,如果等于7的話,就設(shè)置為1,因此可以看出diceRoll的變化是1,2,3,4,5,6,1……

在擲骰子之后,玩家移動(dòng)diceRoll指示的步數(shù),這時(shí)可能已經(jīng)超過了finalSquare,因此需要進(jìn)行if判斷,如果為true的話,執(zhí)行該格子上的事件:如果是普通格子就不動(dòng),如果是梯子或者蛇就移動(dòng)相應(yīng)的步數(shù),這里只需要直接使用square += board[square]就可以了。

在while循環(huán)執(zhí)行完畢之后,重新檢查條件square < finalSquare是否成立,繼續(xù)游戲直到游戲結(jié)束。

Do-while循環(huán)

另一種while循環(huán)是do-while循環(huán)。在這種循環(huán)中,循環(huán)體中的語句會(huì)先被執(zhí)行一次,然后才開始檢測循環(huán)條件是否滿足,下面是do-while循環(huán)的一般形式:

 

復(fù)制代碼代碼如下:
 
do {
statements
} while condition

 

上面的蛇與梯子的游戲使用do-while循環(huán)來寫可以這樣完成。初始化語句和while循環(huán)的類似:

 

復(fù)制代碼代碼如下:

let finalSquare = 25
var board = Int[](count: finalSquare + 1, repeatedValue: 0)
board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02
board[14] = -10; board[19] = -11; board[22] = -02; board[24] = -08
var square = 0
var diceRoll = 0

 

在這種循環(huán)中,第一個(gè)動(dòng)作就是檢測是否落在梯子或者蛇上,因?yàn)闆]有梯子或者蛇可以讓玩家直接到達(dá)第25格,所以游戲不會(huì)直接結(jié)束,接下來的過程就和上面的while循環(huán)類似了,循環(huán)的條件語句還是檢測是否已經(jīng)達(dá)到最終格子。

 

復(fù)制代碼代碼如下:

do {
// move up or down for a snake or ladder
square += board[square]
// roll the dice
if ++diceRoll == 7 { diceRoll = 1 }
// move by the rolled amount
square += diceRoll
} while square < finalSquare
println("Game over!")

 

3、條件語句

通常情況下我們都需要根據(jù)不同條件來執(zhí)行不同語句。比如當(dāng)錯(cuò)誤發(fā)生的時(shí)候,執(zhí)行一些錯(cuò)誤信息的語句,告訴編程人員這個(gè)值是太大了還是太小了等等。這里就需要用到條件語句。

Swift提供了兩種條件分支語句的方式,if語句和switch語句。一般if語句比較常用,但是只能檢測少量的條件情況。switch語句用于大量的條件可能發(fā)生時(shí)的條件語句。

if語句

在最基本的if語句中,條件語句只有一個(gè),如果條件為true時(shí),執(zhí)行if語句塊中的語句:

 

復(fù)制代碼代碼如下:

var temperatureInFahrenheit = 30
if temperatureInFahrenheit <= 32 {
println("It's very cold. Consider wearing a scarf.")
}
// prints "It's very cold. Consider wearing a scarf."

上面這個(gè)例子檢測溫度是不是比32華氏度(32華氏度是水的冰點(diǎn),和攝氏度不一樣)低,如果低的話就會(huì)輸出一行語句。如果不低,則不會(huì)輸出。if語句塊是用大括號(hào)包含的部分。

 

當(dāng)條件語句有多種可能時(shí),就會(huì)用到else語句,當(dāng)if為false時(shí),else語句開始執(zhí)行:

 

復(fù)制代碼代碼如下:
 
temperatureInFahrenheit = 40
if temperatureInFahrenheit <= 32 {
println("It's very cold. Consider wearing a scarf.")
} else {
println("It's not that cold. Wear a t-shirt.")
}
// prints "It's not that cold. Wear a t-shirt."

在這種情況下,兩個(gè)分支的其中一個(gè)一定會(huì)被執(zhí)行。

 

同樣也可以有多個(gè)分支,使用多次if和else

 

復(fù)制代碼代碼如下:

temperatureInFahrenheit = 90
if temperatureInFahrenheit <= 32 {
println("It's very cold. Consider wearing a scarf.")
} else if temperatureInFahrenheit >= 86 {
println("It's really warm. Don't forget to wear sunscreen.")
} else {
println("It's not that cold. Wear a t-shirt.")
}
// prints "It's really warm. Don't forget to wear sunscreen."

上面這個(gè)例子中有多個(gè)if出現(xiàn),用來判斷溫度是太低還是太高,最后一個(gè)else表示的是溫度不高不低的時(shí)候。

 

當(dāng)然else也可以被省掉

 

復(fù)制代碼代碼如下:

temperatureInFahrenheit = 72
if temperatureInFahrenheit <= 32 {
println("It's very cold. Consider wearing a scarf.")
} else if temperatureInFahrenheit >= 86 {
println("It's really warm. Don't forget to wear sunscreen.")
}

在這個(gè)例子中,溫度不高不低的時(shí)候不會(huì)輸入任何信息。

 

switch語句

switch語句考察一個(gè)值的多種可能性,將它與多個(gè)case相比較,從而決定執(zhí)行哪一個(gè)分支的代碼。switch語句和if語句不同的是,它還可以提供多種情況同時(shí)匹配時(shí),執(zhí)行多個(gè)語句塊。

switch語句的一般結(jié)構(gòu)是:

 

復(fù)制代碼代碼如下:

switch some value to consider {
case value 1:
respond to value 1
case value 2,
value 3:
respond to value 2 or 3
default:
otherwise, do something else
}

每個(gè)switch語句包含有多個(gè)case語句塊,除了直接比較值以外,Swift還提供了多種更加復(fù)雜的模式匹配的方式來選擇語句執(zhí)行的分支,這在后續(xù)的小節(jié)會(huì)繼續(xù)介紹。

 

在switch中,每一個(gè)case分支都會(huì)被匹配和檢測到,所有case沒有提到的情況都必須使用default關(guān)鍵詞。注意default關(guān)鍵詞必須在所有case的最后。

下面的例子用switch語句來判斷一個(gè)字符的類型:

 

復(fù)制代碼代碼如下:
 
let someCharacter: Character = "e"
switch someCharacter {
case "a", "e", "i", "o", "u":
println("/(someCharacter) is a vowel")
case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
"n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z":
println("/(someCharacter) is a consonant")
default:
println("/(someCharacter) is not a vowel or a consonant")
}
// prints "e is a vowel"

在這個(gè)例子中,首先看這個(gè)字符是不是元音字母,再檢測是不是輔音字母。其它的情況都用default來匹配即可。

 

不會(huì)一直執(zhí)行

跟C和Objective-C不同,Swift中的switch語句不會(huì)因?yàn)樵赾ase語句的結(jié)尾沒有break就跳轉(zhuǎn)到下一個(gè)case語句執(zhí)行。switch語句只會(huì)執(zhí)行匹配上的case里的語句,然后就會(huì)直接停止。這樣可以讓switch語句更加安全,因?yàn)楹芏鄷r(shí)候編程人員都會(huì)忘記寫break。

每一個(gè)case中都需要有可以執(zhí)行的語句,下面的例子就是不正確的:

 

復(fù)制代碼代碼如下:

let anotherCharacter: Character = "a"
switch anotherCharacter {
case "a":
case "A":
println("The letter A")
default:
println("Not the letter A")
}
// this will report a compile-time error

跟C不同,switch語句不會(huì)同時(shí)匹配a和A,它會(huì)直接報(bào)錯(cuò)。一個(gè)case中可以有多個(gè)條件,用逗號(hào),分隔即可:

 

 

復(fù)制代碼代碼如下:
 
switch some value to consider {
case value 1,
value 2:
statements
}

范圍匹配

 

switch語句的case中可以匹配一個(gè)數(shù)值范圍,比如:

 

復(fù)制代碼代碼如下:
 
let count = 3_000_000_000_000
let countedThings = "stars in the Milky Way"
var naturalCount: String
switch count {
case 0:
naturalCount = "no"
case 1...3:
naturalCount = "a few"
case 4...9:
naturalCount = "several"
case 10...99:
naturalCount = "tens of"
case 100...999:
naturalCount = "hundreds of"
case 1000...999_999:
naturalCount = "thousands of"
default:
naturalCount = "millions and millions of"
}
println("There are /(naturalCount) /(countedThings).")
// prints "There are millions and millions of stars in the Milky Way."

 

元組

case中還可以直接測試元組是否符合相應(yīng)的條件,_可以匹配任意值。

下面的例子是判斷(x,y)是否在矩形中,元組類型是(Int,Int)

復(fù)制代碼代碼如下:

let somePoint = (1, 1)
switch somePoint {
case (0, 0):
println("(0, 0) is at the origin")
case (_, 0):
println("(/(somePoint.0), 0) is on the x-axis")
case (0, _):
println("(0, /(somePoint.1)) is on the y-axis")
case (-2...2, -2...2):
println("(/(somePoint.0), /(somePoint.1)) is inside the box")
default:
println("(/(somePoint.0), /(somePoint.1)) is outside of the box")
}
// prints "(1, 1) is inside the box"

 

Swift教程之控制流詳解

和C語言不同,Swift可以判斷元組是否符合條件。

數(shù)值綁定

在case匹配的同時(shí),可以將switch語句中的值綁定給一個(gè)特定的常量或者變量,以便在case的語句中使用。比如:

 

復(fù)制代碼代碼如下:

let anotherPoint = (2, 0)
switch anotherPoint {
case (let x, 0):
println("on the x-axis with an x value of /(x)")
case (0, let y):
println("on the y-axis with a y value of /(y)")
case let (x, y):
println("somewhere else at (/(x), /(y))")
}
// prints "on the x-axis with an x value of 2"

 

Swift教程之控制流詳解

switch語句判斷一個(gè)點(diǎn)是在x軸上還是y軸上,或者在其他地方。這里用到了匹配和數(shù)值綁定。第一種情況,如果點(diǎn)是(x,0)模式的,將值綁定到x上,這樣在case語句中可以輸出該值。同理如果在y軸上,就輸出y的值。

Where關(guān)鍵詞

switch語句可以使用where關(guān)鍵詞來增加判斷的條件,在下面的例子中:

 

復(fù)制代碼代碼如下:

let yetAnotherPoint = (1, -1)
switch yetAnotherPoint {
case let (x, y) where x == y:
println("(/(x), /(y)) is on the line x == y")
case let (x, y) where x == -y:
println("(/(x), /(y)) is on the line x == -y")
case let (x, y):
println("(/(x), /(y)) is just some arbitrary point")
}
// prints "(1, -1) is on the line x == -y"

 

Swift教程之控制流詳解

每個(gè)case都因?yàn)橛衱here而不同,第一個(gè)case就是判斷x是否與y相等,表示點(diǎn)在斜線y=x上。

4、控制跳轉(zhuǎn)語句

在Swift中控制跳轉(zhuǎn)語句有4種,讓編程人員更好地控制代碼的流轉(zhuǎn),包括:

continue

break

fallthrough

return

其中continue,break和fallthrough在下面詳細(xì)介紹,return語句將在函數(shù)一章介紹。

continue

continue語句告訴一個(gè)循環(huán)停止現(xiàn)在在執(zhí)行的語句,開始下一次循環(huán)。

注意:在for-condition-increment循環(huán)中,increment增量語句依然執(zhí)行,只是略過了一次循環(huán)體。

下面的例子實(shí)現(xiàn)的是去除一個(gè)字符串中的空格和元音字母,從而組成一個(gè)字謎:

 

復(fù)制代碼代碼如下:

let puzzleInput = "great minds think alike"
var puzzleOutput = ""
for character in puzzleInput {
switch character {
case "a", "e", "i", "o", "u", " ":
continue
default:
puzzleOutput += character
}
}
println(puzzleOutput)
// prints "grtmndsthnklk"

 

遍歷字符串的每一個(gè)字符,當(dāng)遇到元音字母或者空格時(shí)就忽略,進(jìn)行下一次循環(huán),從而得到了最終的字謎。

break

break語句將終止整個(gè)循環(huán)的執(zhí)行,可以用在循環(huán)語句中,也可以用在switch語句中。

 

復(fù)制代碼代碼如下:

let numberSymbol: Character = "三"  // Simplified Chinese for the number 3
var possibleIntegerValue: Int?
switch numberSymbol {
case "1", "?", "一", "?":
possibleIntegerValue = 1
case "2", "?", "二", "?":
possibleIntegerValue = 2
case "3", "?", "三", "?":
possibleIntegerValue = 3
case "4", "?", "四", "?":
possibleIntegerValue = 4
default:
break
}
if let integerValue = possibleIntegerValue {
println("The integer value of /(numberSymbol) is /(integerValue).")
} else {
println("An integer value could not be found for /(numberSymbol).")
}
// prints "The integer value of 三 is 3."

 

上面的例子首先檢查numberSymbol是不是一個(gè)數(shù)字,阿拉伯?dāng)?shù)字,漢字,拉丁文或者泰文都可以。如果匹配完成,則將possibleIntegerValue賦值。最后在通過if語句檢測是否已被賦值,并綁定到integerValue常量上,最后輸出。default語句用來迎接未能被上述case匹配的情況,但是不需要做任何事情,因此直接使用break終止即可。

fallthrough

由于Swift中的switch語句不會(huì)自動(dòng)的因?yàn)闆]有break而跳轉(zhuǎn)到下一個(gè)case,因此如果需要想C語言中那樣,依次執(zhí)行每個(gè)case的時(shí)候,就需要用到fallthrough關(guān)鍵詞。

像下面這個(gè)例子一樣,default分支最終都會(huì)被執(zhí)行:

 

復(fù)制代碼代碼如下:

let integerToDescribe = 5
var description = "The number /(integerToDescribe) is"
switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
description += " a prime number, and also"
fallthrough
default:
description += " an integer."
}
println(description)
// prints "The number 5 is a prime number, and also an integer."

 

標(biāo)簽語句

switch和循環(huán)可以互相嵌套,循環(huán)之間也可以互相嵌套,因此在使用break或者continue的時(shí)候,需要知道到底是對(duì)哪個(gè)語句起作用。這就需要用到標(biāo)簽語句。標(biāo)簽語句的一般形式如下:

 

復(fù)制代碼代碼如下:
 
label name: while condition {
statements
}

下面的例子演示了如何使用標(biāo)簽語句以及嵌套的循環(huán)和switch。

 

依然采用之前的那個(gè)梯子與蛇的游戲,第一步依然是設(shè)置初始值:

 

復(fù)制代碼代碼如下:

let finalSquare = 25
var board = Int[](count: finalSquare + 1, repeatedValue: 0)
board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02
board[14] = -10; board[19] = -11; board[22] = -02; board[24] = -08
var square = 0
var diceRoll = 0

 

然后,使用一個(gè)while循環(huán)與switch的嵌套來完成游戲

 

復(fù)制代碼代碼如下:

gameLoop: while square != finalSquare {
if ++diceRoll == 7 { diceRoll = 1 }
switch square + diceRoll {
case finalSquare:
// diceRoll will move us to the final square, so the game is over
break gameLoop
case let newSquare where newSquare > finalSquare:
// diceRoll will move us beyond the final square, so roll again
continue gameLoop
default:
// this is a valid move, so find out its effect
square += diceRoll
square += board[square]
}
}
println("Game over!")

 

在這個(gè)代碼中,將游戲的循環(huán)命名為gameLoop,然后在每一步移動(dòng)格子時(shí),判斷當(dāng)前是否到達(dá)了游戲終點(diǎn),在break的時(shí)候,需要將整個(gè)游戲循環(huán)終止掉,而不是終止switch,因此用到了break gameLoop。同樣的,在第二個(gè)分支中,continue gameLoop也指明了需要continue的是整個(gè)游戲,而不是switch語句本身。



注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到swift教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产三级av片| 18网站在线观看| 久久精品女人毛片国产| 91国偷自产一区二区三区的观看方式| 国产精品白丝av| 丰满圆润老女人hd| 成人拍拍拍在线观看| 日韩不卡高清视频| 国产女同互慰高潮91漫画| 日韩高清欧美激情| 在线免费观看视频黄| 中文在线资源观看视频网站免费不卡| 日韩成人亚洲| 欧美怡春院一区二区三区| 在线看的网站你懂| 久久精品黄色| 懂色av一区二区三区在线播放| 久久av中文字幕| 精品国产视频在线| 男女免费网站| 亚洲图片激情小说| 9999精品视频| 中文字幕在线不卡一区| av在线免费一区| 老司机深夜福利网站| 亚洲无线视频| 黄色一级片播放| 欧美成人一区二区三区| 亚洲九九精品| 日本中文在线一区| 国产精品成人无码专区| 色999国产精品| 欧美日韩精品久久久免费观看| 日韩av高清在线播放| 日韩视频不卡| 天天操夜夜拍| 亚洲一区二区三区xxx视频| 婷婷丁香综合| 先锋av资源在线| 亚洲国产剧情在线观看| 日韩电影在线观看一区| 久久不见久久见免费视频7| 色诱色偷偷久久综合| 国产精品三级久久久久三级| 亚洲1区2区3区视频| 日韩欧美一区三区| 91超碰中文字幕久久精品| 欧美做受高潮1| 国产一区二区三区在线免费观看| 国产美女精品视频国产| 久久国产精品72免费观看| 高清av免费一区中文字幕| 国产在线观看91一区二区三区| 国产一区二区三区乱码| 欧美成人一区二区三区四区| 亚洲一区二区三区午夜| 黄色av电影在线观看| 亚洲综合日韩欧美| 制服诱惑一区二区| 国产成人自拍视频在线| 日韩人妻精品中文字幕| 丰满少妇在线观看bd| 国产精品视频1区| 久久免费大视频| 超级碰碰不卡在线视频| 亚洲黄色一区二区三区| 日本h片在线观看| 亚洲国产精品久久久久秋霞不卡| 九九国产精品视频| 国产欧美日韩综合一区在线播放| 精品人妻一区二区三区蜜桃视频| 激情丁香在线| 日韩av黄色| 欧美另类变人与禽xxxxx| 亚洲成在人线免费| 136福利第一导航国产在线| 国产精品久久久久久9999| 日韩免费不卡视频| 一本色道久久综合亚洲精品按摩| 色播视频在线播放| 国产一区视频在线| 国模视频一区二区| 欧美影视一区二区| 91在线在线观看| 国产三级在线观看| 在线精品视频免费播放| 中文字幕在线免费看线人| 国产精品欧美一区二区三区| 亚洲精品成a人在线观看| 91九色蝌蚪国产| 午夜性色福利影院| 国产精品视频导航| yourporn久久国产精品| 疯狂揉花蒂控制高潮h| 日本一区二区免费高清| 一区二区三区四区视频精品免费| 日韩一级在线| 九九热精品国产| 欧美性高潮在线| 牛牛电影国产一区二区| 欧美激情性做爰免费视频| 高潮白浆视频| 精品国产乱码久久久久酒店| 国产aⅴ爽av久久久久成人| 久久99精品久久久久久国产越南| 可以免费在线观看的av| 福利视频导航大全| 偷拍亚洲精品| 日韩一二三区不卡在线视频| 中文字幕在线一区免费| 成年网址网站在线观看| 久久人体做爰大胆| 成年丰满熟妇午夜免费视频| 日韩高清国产一区在线| 免费美女久久99| 色狠狠综合天天综合综合| 国产亚洲欧美另类一区二区三区| 国产福利片在线观看| 国产99久久久国产精品免费看| 中文字幕 亚洲一区| 亚洲色图欧洲色图婷婷| 日本不卡不码高清免费观看| 91免费看国产| 日韩中文在线不卡| 精品欧美激情在线观看| 在线国产电影不卡| 91传媒免费视频| 免费精品国产自产拍在| 欧洲精品一区二区三区| 国产又粗又黄又爽| 亚洲一区二区三区四区在线播放| 在线观看中文字幕的网站| 任我爽在线视频| 午夜时刻免费入口| 久久爱另类一区二区小说| 午夜天堂精品久久久久| 人妻av一区二区三区| 亚洲精品美女在线观看| 久久久国产一区二区三区| 欧美日韩1080p| 成人国产精品免费视频| 国产免费成人| 欧美国产日韩在线观看成人| 国际精品欧美精品| 精品少妇久久久| 亚洲91精品在线| 亚洲激情图片一区| 国产激情自拍视频| 中文字幕亚洲在线| 久久亚洲一区二区三区四区五区高| 精品自拍一区| 亚洲激情二区| 26uuu亚洲国产精品| 成人手机在线视频| 91在线观看| free性欧美| 97在线电影| 国产亚洲精品福利| 国产精品久久久久久久久久辛辛| 久久久久久青草| 欧美色成人综合| 天堂在线一区二区三区| 国内小视频在线看| 美女毛片在线观看| 亚洲欧洲精品一区二区三区波多野1战4| 国产在线精品国自产拍免费| 欧美偷拍第一页| 午夜在线视频| 狠狠久久综合婷婷不卡| 大胆人体一区| 中国视频免男男gay| 国产99久久久国产精品免费看| 91久久久国产精品| 天堂v在线视频| 亚洲午夜免费视频| 欧洲精品亚洲精品| 日韩08精品| 国产亚洲aⅴaaaaaa毛片| 日韩专区欧美专区| 中文av一区特黄| 日韩欧美成人免费视频| 男人女人黄一级| 国内揄拍国内精品久久| 最新av免费在线| 少妇精品一区二区三区| 亚洲人成在线观看网站高清| 精品国产一区二区三区麻豆小说| 欧美xxxx×黑人性爽| 国产免费网址| 黄色激情视频在线观看| 久久久久久久国产精品视频| 欧美精品国产精品久久久| 69av影院| 无限资源日本好片| 亚洲国产欧美一区| 另类美女黄大片| 国产黄a三级三级三级| 欧美日韩一区二区免费视频| 最近2019好看的中文字幕免费| 久久亚洲影视婷婷| 91精品短视频| 国产精品丝袜一区二区| 国产又猛又黄又爽| 国产乱码一区二区三区| 久久人人看视频| 99久久99热这里只有精品| 成 人 免费 黄 色| 欧美日韩在线精品一区二区三区激情综| 欧美日韩黄网站| 丰满的少妇愉情hd高清果冻传媒| 91精品国产自产在线观看永久∴| av影院午夜一区| 欧美激情一二区| 亚洲成人免费视频| 在线观看av片| 中文字幕系列一区| 丁香啪啪综合成人亚洲| 色呦呦一区二区| 欧美一区二区视频在线| 中文字幕乱码一区二区免费| 久久精品人人爽| 国产模特av私拍大尺度| 91久久久一线二线三线品牌| 久草在线视频资源| 黄色电影免费在线看| 欧美伦理片在线看| 僵尸再翻生在线观看免费国语| 欧美色图欧美色图| 91成人在线精品| 99a精品视频在线观看| 欧美性猛交一区二区三区| 成年人晚上看的视频| 欧美色图亚洲天堂| 国产真实久久| 四虎免费在线视频| 黄网视频在线观看| 欧美一区二区三区久久久| 日本欧美一区二区三区乱码| 色先锋资源久久综合5566| 午夜精品福利一区二区三区蜜桃| 国产精品久久久久av蜜臀| 久久精品视频8| 国产呻吟对白刺激无套视频在线| av av片在线看| 亚洲欧美另类日本| 高清不卡一二三区| 亚洲人成影院77777| 九九热视频精品| 日韩电影中文字幕在线观看| 欧美free嫩15| 一本一道久久综合狠狠老精东影业| 亚洲伦理久久| 亚洲男人在线天堂| av观看成片免费网站| 狠狠做深爱婷婷久久综合一区| 无码人妻久久一区二区三区蜜桃| 国产日本视频| 蜜臀久久精品久久久久| 国产精品欧美一区喷水| av网址在线| 97在线公开视频| 国产福利一区二区三区在线观看| 国产成人综合精品在线| 97国产在线观看| 国产一级黄色大片| 丰满少妇在线观看bd| 欧美午夜网站| 国产高清中文字幕| 亚洲最大的黄色网址| 成人444kkkk在线观看| 国产一级大片| 亚洲色图偷窥自拍| 日本一区二区动态图| 成人午夜大片| 精品国产91洋老外米糕| 久久精品在这里| 欧美丝袜一区二区三区| 国自在线精品视频| 亚洲色大成网站www久久九九| 网红女主播少妇精品视频| 久久精品欧美一区二区三区麻豆| 女人香蕉久久**毛片精品| www.av中文字幕| 日韩电影免费观看中文字幕| 四虎成人欧美精品在永久在线| 天天综合天天添夜夜添狠狠添| 性色88av老女人视频| 女人18毛片毛片毛片毛片区二| 精品视频无码一区二区三区| 日本黄色网网页| 色婷婷色综合| 国产卡1卡2卡三卡在线| 色女人综合av| 免费中文字幕在线| av激情在线观看| 日韩.欧美.亚洲| 国产精品高清免费在线观看| 免费看的国产视频网站| 国产裸体视频网站| 成人在线视频一区二区| 久久综合精品一区| 91香蕉视频污在线观看| 色琪琪免费视频网站| 黄色一级免费视频| 欧美特黄一区| 成人在线免费观看网站| 丁香花在线电影| 国产精品毛片va一区二区三区| 成人影院www在线观看| 日韩精品电影一区亚洲| 日韩精品dvd| 日韩在线观看视频一区二区三区| 视频区小说区图片区| 久久久男人的天堂| 国产精品va在线观看无码| 国产精品x453.com| 妞干网在线观看视频| 久久波多野结衣| www.xxxx精品| 综合久久一本| 欧美日韩成人在线观看| 九九热久久免费视频| 久久精品一区二区三区不卡免费视频| 日产精品久久久一区二区福利| 中文字幕一区二区在线观看| 日本r级电影在线观看| 美女视频网站在线观看| 成人性生交大片免费看视频在线|