控制流

使用ifswitch來進行條件操做,使用for-inforwhilerepeat-while來進行循環。包裹條件和循環變量括號能夠省略,可是語句體的大括號是必須的。javascript

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 score { ... }這樣的代碼將報錯,而不會隱形地與 0 作對比。php

你能夠一塊兒使用iflet來處理值缺失的狀況。這些值可由可選值來表明。一個可選的值是一個具體的值或者是nil以表示值缺失。在類型後面加一個問號來標記這個變量的值是可選的。java

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

練習: 把optionalName改爲nil,greeting會是什麼?添加一個else語句,當optionalNamenil時給greeting賦一個不一樣的值。swift

若是變量的可選值是nil,條件會判斷爲false,大括號中的代碼會被跳過。若是不是nil,會將值賦給let後面的常量,這樣代碼塊中就可使用這個值了。
另外一種處理可選值的方法是經過使用 ?? 操做符來提供一個默認值。若是可選值缺失的話,可使用默認值來代替。oop

let nickName: String? = nil let fullName: String = "John Appleseed" let informalGreeting = "Hi \(nickName ?? fullName)"

switch支持任意類型的數據以及各類比較操做——不單單是整數以及測試相等。測試

let vegetable = "red pepper" switch vegetable { case "celery": print("Add some raisins and make ants on a log.") 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.") }

練習: 刪除default語句,看看會有什麼錯誤?ui

注意let在上述例子的等式中是如何使用的,它將匹配等式的值賦給常量xspa

運行switch中匹配到的子句以後,程序會退出switch語句,並不會繼續向下運行,因此不須要在每一個子句結尾寫breakrest

你可使用for-in來遍歷字典,須要兩個變量來表示每一個鍵值對。字典是一個無序的集合,因此他們的鍵和值以任意順序迭代結束。code

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 for (kind, numbers) in interestingNumbers { for number in numbers { if number > largest { largest = number } } } print(largest)

練習: 添加另外一個變量來記錄如今和以前最大數字的類型。

使用while來重複運行一段代碼直到不知足條件。循環條件也能夠在結尾,保證能至少循環一次。

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

你能夠在循環中使用..<來表示範圍,也可使用傳統的寫法,二者是等價的:

var firstForLoop = 0 for i in 0..<4 { firstForLoop += i } print(firstForLoop) var secondForLoop = 0 for var i = 0; i < 4; ++i { secondForLoop += i } print(secondForLoop)

使用..<建立的範圍不包含上界,若是想包含的話須要使用...

相關文章
相關標籤/搜索