over 6 years ago

For-In Loops

前面像是 array 或是 dictionary 如果取 index 或是 key value 就不再敘述。
若不需要用值只想要跑迴圈的話,可以用底線來省略值。

for _ in 15 {
}

While

跟一般 while 一樣,條件是 true 就會進入 body,一直到條件為 false 才會跳出。

var k = 0
while k > 10 {
    k += 1
}

也有類似其他語言的 do while 用法,此用法第一次跑迴圈時不會經過條件判斷。

let k = false
repeat {
    print("loop")
} while k

Switch

  • Swift 的 switch 判斷不局限於整數,可以用許多不同的型別。
  • Swift 的 switch 若遇到符合的 case,會直接結束,不會再跑下一個 case, 所以不需要用 break 跳開,但如果需要的話還是可以在 switch 內使用 break。
  • Swift 的 case 內不可為空的,否則會有 error。
    let s = "a"
    switch s {
    case "a":
        print ("a")
    case "A":
        print ("b")
    default:
        break
    }
    
    可以在 switch 的判斷內做數量判斷。
    let count = 100
    switch count {
    case 0:
        break
    case 1..<=50:
        break
    case 51..<=100:
        break
    default:
        break
    }
    
    可以透過 switch 對 tuple 做判斷,用底線可以代表忽略 tuple 內的這個位置。
    let t = (1,2,3,4)
    switch t {
    case (0,0,0,0):
        break
    case (,2,,_):
        break
    default:
        break
    }
    
    如果有需要的話,可以將判斷的值宣告成新的變數或常數。
    let k = 123
    switch k {
    case 1..<100:
        break
    case let x
        x
    }
    
    Switch 的判斷內可以加上 where 做額外的判斷
    let k = 123
    switch k {
    case 1..<100:
        break
    case let x where x > 120:
        x
    default:
        break
    }
    
    可以把多種 case 條件混合在一個 case 內。
    let k = 123
    switch k {
    case 1,2,3,4,5,6:
        break
    default:
        break
    }
    

Fallthrough

Fallthrough 只能用在 switch 內,用途是可以跳到最後一個 case。

let k = 123
switch k {
case 1,2,3,4,5,6:
        break
case 123:
        fallthrough
default:
        print(123")
    break
}

命名

幫 while, for-in 等等的 loop 方法來命名,可以在另外的判斷或是 loop 內來操作特定的 loop。
以下的例子是雙重迴圈,對外層迴圈來命名,並且在內層迴圈來停止最外層迴圈,讓整個迴圈停止。

testLoop: for _ in 15 {
    for index in 15 {
        if index == 1 {
            break testLoop
        }
    }
}

命名方法就是參照上述的例子,後方可用 while 或 switch 來取代,也可以用 continue 等關鍵字來操作 loop。

Guard

  • Guard 一定是判斷條件為 true。
  • Guard 一定要有 else,且 else 內一定要有 return 或是 break 等等跳開的方法。
    let num = 5
    guard num == 5 else {
        return
    }
    
    可以用 guard 判斷 Optionals 是否為 nil, 若 optionals 有值且後續想要直接使用的話,可以像之前提到與 if 一樣的方法來打開, 可以快速的同時判斷 optionals 是否為 nil 並取值。
    let num: Sting? = "123"
    guard let value = num else {
        return
    }
    value
    
← iOS Swift : Collection Types iOS Swift : Function →