Swift 語言入門(三)控制流程
控制流程
ifif 在程式開發,條件判斷很常用,用來判斷 是 或 否 兩種狀態。 例如字串變數,是否為空字串,數字是否大於零。 if 語法範例: if z > b {
// 做些利大於弊的事
}
if 條件判斷需加上另外的狀態處理,則用 else,例如: if str == "" {
// 這裡處理 空字串流程
}
else {
// 這裡處理 非空字串
}
if、else if、else 綜合範例: if (index > 0) { // if 條件語句可括號
"index 大於 0"
}
else if index == 0 { // if 條件語句可不括號
"index 等於 0"
}
else {
"index is 為負數"
}
for 與 for-infor 迴圈 是用來訪問連續的資料,例如你有一筆名冊的資料,想要把每個名字都印出來,就會需要它! for 語法格式: for 初始值; 條件描述; 遞增或遞減值 {
// 條件成立 則進入此段程式
}
範例: for var i = 0; i < 3; i++ {
println("var i is \(i)")
}
log 輸出 =>
var i is 0
var i is 1
var i is 2
for char in "Swift" {
println(char)
}
log 輸出 =>
S
w
i
f
t
for-in 陣列
let languages = ["Swift", "Objective-C", "Ruby", "Java"]
for lang in languages {
println(lang)
}
log 輸出 =>
Swift
Objective-C
Ruby
Java
for-in Range也可以使用 Range 形態,例如: for i in 1..<5 {
println("range in \(i)")
}
log 輸出 =>
range in 1
range in 2
range in 3
range in 4
for-in 字典當然強大的 for-in 語句,也支援常用的字典型態,搭配 Tuples(元組,多個元素的組合),讓尋訪字典內的 key, value 變得相當直覺!範例如下: let nums = ["one": 1, "two": 2, "three": 3]
for (str, num) in nums {
println("\(str) is \(num)")
}
=>
one is 1
two is 2
three is 3
while 與 do whilewhile 迴圈與 for 迴圈類似,但 while 迴圈會重複執行他的程式區塊,直到條件為 否。 while 語法格式: // while
while 條件 {
// 執行程式區塊
}
// do while
do
{
// 執行程式區塊
} while (條件)
while舉個例子,假設我們有個變數 decrease 帶著數值 3,在 while 迴圈內一直遞減,while 條件 大於 0,所以 decrease 在大於 0 之前,while 迴圈 都會一直被執行。 var decrease = 3
while decrease > 0
{
println("decrease \(decrease)")
--decrease
}
=>
decrease 3
decrease 2
decrease 1
do while迴圈語句用於,不論如何,迴圈先執行再說,後面 while 條件在來決定要不要繼續執行迴圈。範例如下: var increase = 0
do
{
println("increase \(increase)")
++increase
} while (increase < 3)
=>
increase 0
increase 1
increase 2
Switch前面介紹過 if 判斷式,switch 也是判斷式,不過是對於數值的連續判斷,當我們用了很多的 if 或 else if 判斷式時,或許是我們考慮該使用 switch 的時機。 switch 語法格式: switch 變數 {
case 比較的數值:
// 數值一樣時,執行的區塊
default:
"其他數值"
}
Switch 數值判斷let count = 3
switch count {
case 1:
println("one")
case 2:
println("two")
case 3:
println("three")
default:
println("other value")
}
=> three
Switch 字串switch 語句也支援字串。 var name = "Apple"
switch name {
case "Apple":
println("Hi Apple!")
case "iPhone":
println("Hi iPhone!")
default:
println("請問你叫什麼名字?")
}
=>
Hi Apple!
Switch 多數值 case 判斷let number = 8
switch number {
case 1, 3, 5, 7, 9:
println("奇數")
case 2, 4, 6, 8, 10:
println("偶數")
default:
println("其他數值")
}
=> 偶數
Switch 使用 Tuplelet point = (1,2)
switch point {
case (0,0):
println("原始起點")
case (_, 0):
println("x=任意值, y=0")
case (0, _):
println("x=0, y=任意值")
case (1,2):
println("坐標 1, 2")
default:
println("其他坐標")
}
=>
坐標 1, 2
switch 的 where 條件與 數值綁定 (Value Bindings)Swift 語言的強大 switch 語句還可針對條件作判斷,例如下方範例 let anotherPoint = (5,5)
switch anotherPoint {
case let (x,y) where x==y:
println("正方形")
default:
println("矩形")
}
=>
正方形
Switch in Rangeswitch 當然也支援 Range 型別。 var num = 9
switch num {
case 0...9:
println("個位")
case 10...99:
println("十位")
case 100...999:
println("百位")
default:
println("其他")
}
=>
個位
Switch Enum在此我們可以看到 Swift語言,對於 Objective-C 的 Enums 修正了冗長的變數名稱,例如改以 enum CompassPoint {
case North
case South
case East
case West
}
var direction = CompassPoint.South
switch direction {
case .North:
println("北邊")
case .East:
println("東邊")
case .West:
println("西邊")
case .South:
println("南邊")
}
=>
南邊
標簽語句整段的執行結果,尋訪 names 陣列,並且尋訪每個元素的字元,遇到 小寫 a 字元時,跳 (break) 下個元素。 let names = ["Anna", "Alex", "Brian", "Jack"]
var result = ""
nameLoop: for name in names {
charLoop: for char in name {
theSwitch: switch char {
case "a": // 只要遇到 小寫 a,就結束 charLoop
break charLoop
default:
result += char
}
}
}
println(result)
=>
AnnAlexBriJ
控制轉移語句 (control transfer statements)控制轉移語句 (control transfer statements)能讓我們撰寫控制流程時,自由的決定程式要往哪邊跑,Swift 語言有四種控制轉移語句。
我們往下來看範例: continue在 for i in 1...10 {
if i > 5 {
println("continue \(i)")
continue
}
println(i)
}
=>
1
2
3
4
5
continue 6
continue 7
continue 8
continue 9
continue 10
breakbreak 脫離迴圈,在 for i in 1...10 {
if i > 5 {
println("break \(i)")
break
}
println(i)
}
=>
1
2
3
4
5
break 6
fallthrough因為 integerToDescribe 是 Int,所以它一定是數字,但未必是質數,如果是質數,則 fallthrough 到 default,因為質數也是數字。 let integerToDescribe = 5
var integerDescription = "\(integerToDescribe) 是"
switch integerToDescribe
{
case 2, 3, 5, 7, 11, 13, 17, 19:
integerDescription += " 質數, 也是"
fallthrough
default:
integerDescription += " 數字"
}
println(integerDescription)
=>
5 是 質數, 也是 數字
return函式回傳的一些用法,直接回傳數值或變數,亦可回傳 Tuples。 func sayHelloWorld() -> String
{
return "Hello World"
}
// return with Tuple
func http404Error() -> (Int, String)
{
return (404, "Not Found")
}
|

Java 學習之路