一、循環(huán)語(yǔ)句
1.for循環(huán)
1)For-Condition-Increment條件循環(huán),和c語(yǔ)言中的一樣,例如:
for var x = 0;x<=5;x++ {?
? ? ? ? // ?執(zhí)行5次霞揉,x從0到4
}
2)for -in循環(huán)
(1)對(duì)于數(shù)據(jù)范圍适秩,序列,集合等中的每一個(gè)元素秽荞,都執(zhí)行一次扬跋,例如:
for i in 1...5{
? ? ? // ?執(zhí)行5次钦听,i從1到5
}
注意:i只循環(huán)中存在,也就是出了{}i就不存在了
(2)如果不需要序列中的每一個(gè)值潮秘,可以使用_來(lái)忽略它,例如:
for _ in 1...5{
//? 執(zhí)行5次,i從1到5
}
(3)遍歷數(shù)組
let array = [1,2,5,4]
for a in array{
}
(4)遍歷字典
let animalLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animal,count) in animalLegs{
? ? print("\(animal)s have \(count) legs")
}
(5)遍歷字符串
for character in "jdjajdka".characters{
}
注:包裹條件和循環(huán)變量括號(hào)可以省略,但是語(yǔ)句體的大括號(hào)是必須的
2.while循環(huán)
while循環(huán)執(zhí)行一系列代碼塊,直到某個(gè)條件為false為止乍构,長(zhǎng)用于循環(huán)的次數(shù)不確定的情況
1) while循環(huán)
var i = 0
while i < 5{
? ? ? // 執(zhí)行5次
? ? ? ?i++
}
2)repeat-while循環(huán)
var i = 0
repeat {
i++
} while i < 5
二、條件語(yǔ)句
注意:
1) 和C語(yǔ)言以及Objective-C不一樣占键,if或者else后面必須帶有括號(hào),否則編譯器會(huì)報(bào)錯(cuò)
2) 在if語(yǔ)句中,條件必須是一個(gè)布爾表達(dá)式——像if name { ... }這樣的代碼是錯(cuò)誤的
可以用下面方式實(shí)現(xiàn):
let name = true
if name{
}
補(bǔ)充:可選值可用于把變量的值賦值nil,例如:
var optionalString:String? = "Hello"
optionalString = nil
var idh :Int? = 123
idh = nil
使用:在類型后面加一個(gè)問(wèn)號(hào)
可以使用if和let來(lái)處理值缺失,例如:
var optionalName: String? = "John Hello"
//optionalName = nil
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
三牲距、switch語(yǔ)句
說(shuō)明:
(1)Swift 中的switch牍鞠,當(dāng)匹配的 case 分支中的代碼執(zhí)行完畢后,程序會(huì)終止switch語(yǔ)句评姨,而不會(huì)繼續(xù)執(zhí)行下一個(gè) case 分支难述。這也就是說(shuō),不需要在 case 分支中顯式地使用break語(yǔ)句。這使得switch語(yǔ)句更安全胁后、更易用店读,也避免了因忘記寫break語(yǔ)句而產(chǎn)生的錯(cuò)誤。
(2)支持任意類型的數(shù)據(jù)以及各種比較操作——不僅僅是整數(shù)以及測(cè)試相等
1)匹配一個(gè)數(shù)值范圍
var a = 5
switch a {
case 0...3:
print("a= 0")
case 4...6:
print("a = 1")
default:
print("a = 4")
}
2)匹配元組攀芯,_代表著任何值
var a = (5,2)
switch a {
case (1,1):
print("a= 0")
case (_,2):
print("a = 1")
default:
print("a = 4")
}
3)數(shù)值綁定
在case匹配的同時(shí)屯断,可以將switch語(yǔ)句中的值綁定給一個(gè)特定的常量或者變量,以便在case的語(yǔ)句中使用侣诺。比如:
var a = (1,2)
switch a{
case (1,let x):
print("x:\(x)") // 可以根據(jù)1得到x
case (let y,2):
print("y:\(y)")
default:
print("other")
}
4) 匹配字符
var str1:Character = "A"
switch str1
{
case? "A","a":
print("Have A")
default:
print("No A")
}
5)使用where關(guān)鍵詞來(lái)增加判斷的條件
var a = (1,2)
switch a{
case let (x,y) where x > y:
? ? ? ? ?print("x > y")
case let (x,y) where x< y:
? ? ? ? ?print("y > x")
default:
? ? ? ? ?print("other")
}
(3)如果兩個(gè)分支執(zhí)行的是相同的代碼殖演。可以直接寫在一個(gè)case里面趴久,用逗號(hào)妥箕,隔開(kāi),例如:
var a = 1
switch a {
? ? case 0,1:
? ? ? ? ?print("a= 0") ? ?
? ? ?default:
? ? ? ? ?print("a = 4")
}
三、控制跳轉(zhuǎn)語(yǔ)句
1) continue
continue語(yǔ)句告訴一個(gè)循環(huán)停止現(xiàn)在在執(zhí)行的語(yǔ)句,開(kāi)始下一次循環(huán)
for a in 0...4{
if a == 3{
? ? ? continue
}
? ? ? print(a) // 執(zhí)行4次
}
2)break
break語(yǔ)句將終止整個(gè)循環(huán)的執(zhí)行,可以用在循環(huán)語(yǔ)句中,也可以用在switch語(yǔ)句中
for a in 0...6{
if a == 3{
? ?break
}
? ? ?print(a) // 執(zhí)行3次
}
3) fallthrough
由于Swift中的switch語(yǔ)句不會(huì)自動(dòng)的因?yàn)闆](méi)有break而跳轉(zhuǎn)到下一個(gè)case,因此如果需要想C語(yǔ)言中那樣,依次執(zhí)行每個(gè)case的時(shí)候赖欣,就需要用到fallthrough關(guān)鍵詞
var s: Int = 2
switch s{
case 1:
print("1")
case 2:
print("2") // 打印
fallthrough case 3:
print("3")? // 打印
default :
print("other")
}