Control Flow
github:Swift基礎實例
github:SwiftBasicTableView
簡介
條件語句用 if
和 switch
;循環(huán)語句使用 for-in
,for
,while
,repeat-while
馆纳。其中兽愤,條件和循環(huán)變量兩側(cè)不用寫圓括號()
纽绍,但是大括號{}
不能蚀客琛:
let individualScores = [22,33,55,66]
var teamScore = 0
for score in individualScores {
if score > 50 {
teamScore+=3
}
else {
teamScore+=1
}
}
print(teamScore)
條件語句
if
在if
聲明中,條件必須是一個bool
表達式踢故。比如上面代碼中if score > 50 { ... }
是對的孝常,如果變?yōu)?code>if score { ... } 則會報錯Type 'Int' does not conform to protocol 'BooleanType'
状共。if
和let
可以搭配一個可選值
進行使用,之所以稱為可選值尘应,是因為這個值要么包含一個值惶凝,要么是一個空nil
。在一個值的類型后加上一個問號?
表示此值可選:
var optionalString : String? = "Hello kitty"
print(optionalString == nil)
var optionalName: String? = "Swift"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
else {
print(optionalName)
}
- 上面
if
條件中犬钢,如果optionalName
為空苍鲜,則執(zhí)行else
,如果不為空玷犹, 那么會將值賦給let
后面的name
混滔,這樣name
就有了一個有效值
- 缺省值表達式
可以用操作符??
來提供一個默認值,當值為空的時候歹颓,使用提供的默認值:
let nickName: String? = nil
let fullName: String = "Swift"
let informalGreeting = "Hi \(nickName ?? fullName)"
- 注意
??
前后都要有空格
循環(huán)語句
-
switch
switch
支持任何類型的數(shù)據(jù)以及多樣的比較操作符
let vegetable = "red pepper"
switch vegetable {
case "celery":
print("Add some raisins")
case "cucumber", "watercress":
print("That would make a good tea sandwich")
case let x where x.hasSuffix("pepper"):
print("Is it a spicy \(x)?")
default:
print("Everything tastes good in soup.")
- 每一個
case
后都不需要寫break
坯屿,當其中一個case
成立時,程序就會執(zhí)行相應case
里的代碼晴股,執(zhí)行完后愿伴,就會直接退出switch
循環(huán) - 第二個
case
中,只要滿足一個條件电湘,就會執(zhí)行里面的print
-
for-in
for-in
在OC
語言中的格式for (<#type *object#> in <#collection#>)
隔节,咋swift
語言中,type
是選填的:
var shoppingList = ["fish","water"]
for name in shoppingList {
print(name)
}
- 加上正確的
type
也是不會錯的for name: String in shoppingList{...}
- 用
for-in
迭代字典
在for-in
中寂呛,可以用一對名字(key,value)
來表示字典中的鍵值對key-value
怎诫,進行迭代字典中的值,字典是無序的贷痪,所以鍵值對的迭代順序也是隨機的:
var largest = 0
var largestKind = ""
let interestingNumbers = ["Prime":[2,3,5,7],"Square":[1,4,9,16,25]]
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largestKind = kind
largest = number
}
}
}
print(largest)
print(largestKind)
- 打印得到
25
和Square
-
for-in
和范圍符..<
valueOne..<valueTwo
的取值范圍是包含valueOne幻妓,不包括valueTwo。下面的兩段代碼都是運算5!
var factorial = 5
for i in 1..<5 {
factorial = (5-i)*factorial
}
print(factorial)
var factorialTwo = 5
for var i = 1; i < 5; i++ {
factorialTwo = (5-i)*factorialTwo
}
print(factorialTwo)
- 注意
..<
的前后都沒有空格 - 符號
...
包含前后兩個值
-
while
用while
來重復執(zhí)行一塊代碼劫拢,直到條件發(fā)生改變肉津。條件可以放在最后强胰,這樣while
會至少執(zhí)行一次。
var whileNumber = 2
while whileNumber < 3 {
whileNumber += 1
}
print(whileNumber)
var whileNumber2 = 2
repeat {
whileNumber2 += 1
} while whileNumber2 < 2
print(whileNumber2)
-
whileNumber
等于 3妹沙,whileNumber2
也等于 3