Swift-控制流

在 Swift 中,包裹條件和循環變量的括號可以省略,舉個栗子

let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores { // 循環語句的小括號可以省略
    if score > 50 { // 條件語句的小括號可以省略
        teamScore += 3
    } else {
        teamScore += 1
    } 
} // 循環語句體的大括號不能省略
print(teamScore)


在 if 語句中,條件必須是一個布爾表達式。什麼意思呢?比如以前我們常用 if (a) 來代替 if (a != 0),但是在 Swift 裏 if (a) 就會報錯,必須寫成 if (a != 0)


在 Swift 中有可選值。可選值可能是一個具體的值,也有可能是 nil。在類型後面加一個問號來標記這個變量的值是可選的,比如:

var optionalString: String? = "Hello"
print(optionalString == nil) // 輸出結果爲 false


可以用 if 和 let 來處理可選值:

var optionalName: String? = "John"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello, \(name)"
}


當 optionalName 不是 nil 時會將值賦給 name,當 optionalName 是 nil 時,條件會判斷爲 false,大括號中的代碼會被跳過。

但是爲什麼當 optionalName 是 nil 時條件會判斷爲 false 呢?我想是因爲 Swift 中不能直接用 nil 賦值:



這樣寫可以:

let a : Int? = nil


另一種處理可選值的辦法是用 ?? 操作符來提供一個默認值。當可選值缺失時用默認值來代替:

let nickName: String? = nil
let fullName = "John"
let informalGreeting = "Hello \(nickName ?? fullName)" // 輸出結果爲 Hello John
當 nickName 爲 nil 時,就會使用默認值 fullName。


switch 是 Swift 中的一大亮點。在 Swift 裏 switch 語句支持任意類型的數據以及各種比較操作!

let name = "some object"
switch name {
case "lala":
    print("111111")
case "okok", "123":
    print("222222")
case let x where x.hasSuffix("object"):
    print("Is it \(x)?")
default:
    print("333333")
}
最終輸出結果爲 Is it some object?

注意 let x where x.hasSuffix("object") 一句的用法,非常的靈活。感覺有點像 sql 語句。

在 Swift 中每個 case 後都不用寫大括號,而且某個 case 匹配成功的話就不會繼續往下執行,所以也不需要寫 break。


可以用 for-in 來遍歷字典,用兩個變量來表示每個鍵值對(如下面的 kind 和 numbers)。別忘了字典是無序的~

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
]
var largest = 0 // 記錄最大的數值
var largestKind = String() // 記錄最大數的類型
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
            largestKind = kind
        }
    } }
print(largest, largestKind) // 輸出結果爲 25 Square
現在我們有一個字典,字典裏有三種不同類型的數,我們要找出其中最大的數,以及這個數的類型。最後我們找到最大的數是 25,它是一個平方數。


while 和其它語言一樣,在 Swift 中有 repeat while,它和其它語言中的 do while 是一樣的,保證至少能執行一次循環。

var n = 2
while n < 100 {
    n = n * 2
}
print(n)

var m = 2
repeat {
    m = m * 2
} while m < 100
print(m)





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章