標籤:c style a color int get
上述代碼中,如果可選值為nil,那麼判斷條件則為false,而且在{}中的代碼將會被忽略,如果可選值不為nil,會將該值逐步運算後賦值給let後面的常量,其中逐步運算過程將依據實際的代碼塊.
Switch 文法支援任何類型資料以及各種比較操作,並不局限在整型.
let vegetable = "red pepper"
switch vegetable {
case "celery":
let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber", "watercress":
let vegetableComment = "That would make a good tea sandwich."
case let x where x.hasSuffix("pepper"):
let vegetableComment = "Is it a spicy \(x)?"
default:
let vegetableComment = "Everything tastes good in soup."
}
EXPERIMENT //練習題
Try removing the default case. What error do you get? // 嘗試刪除default 語句,看看或得到什麼錯誤提示?
Switch文法在執行完成匹配的代碼之後會直接退出,不會再繼續執行後面的case語句,因此不必在每個case語句後面明顯的添加break來跳出switch.
在for-in文法中,你可以通過索引值對的形式訪問字典中的每個條目(即遍曆字典).
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
}
}
}
largest
EXPERIMENT // 練習題
Add another variable to keep track of which kind of number was the largest, as well as what that largest number was. // 試著添加另一個變數來追蹤largest的類型,同時也看看largest的值是多少.
在Swift中,使用while可以根據條件來執行一段代碼體,直到條件出現某種變化.迴圈的條件可以放在最後,這樣可以確保迴圈至少被執行一次.
var n = 2
while n < 100 {
n = n * 2
}
n
var m = 2
do {
m = m * 2
} while m < 100
m
在迴圈中,可以使用..來指定一個索引的範圍(用在初始化,條件和增量)下面代碼的兩個迴圈是同樣的效果:
var firstForLoop = 0
for i in 0..3 {
firstForLoop += i
}
firstForLoop
var secondForLoop = 0
for var i = 0; i < 3; ++i {
secondForLoop += 1
}
secondForLoop
使用..確定範圍,會忽略上一個值(就是範圍的初始值),如果使用...確定範圍,就要包含兩個值(初始值和終止值).
Functions and Closures
/*函數以及組合體*/
在Swift中,使用func 來聲明一個函數;調用函數時,只需在函數名字後面跟上(),在()內添加參數列表.使用箭頭(->)來分隔參數名稱和函數的傳回值類型.
func greet(name: String, day: String) -> String { //定義函數greet,參數為字串型的name和day,傳回值為字串
return "Hello \(name), today is \(day)."
}
greet("Bob", "Tuesday") //調用greet函數
EXPERIMENT // 練習題
Remove the day parameter. Add a parameter to include today’s lunch special in the greeting. // 刪掉day這個參數,添加一個參數(包含today’s lunch)到greet函數中指定的位置
通過組合可以從一個函數返回多個值:
func getGasPrices() -> (Double, Double, Double) {
return (3.59, 3.69, 3.79)
}
getGasPrices()
函數也可以通過數組的形式來接收多個參數:
func sumOf(numbers: Int...) -> Int { /**定義函數sumof(),參數為numbers數組*/
var sum = 0 /**定義變數sum 並賦值為0*/
for number in numbers { /**for迴圈,遍曆numbers數組*/
sum += number /**求和*/
}
return sum /**返回sum*/
}
sumOf() /**調用函數sumof(),不傳遞參數*/
sumOf(42, 597, 12) /**調用函數sumof(),傳遞三個參數*/
EXPERIMENT // 練習題
Write a function that calculates the average of its arguments. // 編寫一個函數,計算它參數的平均值
函數可以嵌套,嵌套在內層的函數,可以訪問它外層函式宣告的變數;在一個複雜或者冗長的函數中,可以使用嵌套的函數來組織架構.
func returnFifteen() -> Int { /**定義函數returnFifteen()*/
var y = 10 /**定義變數y,賦值10*/
func add() { /**定義函數add()*/
y += 5
}
add() /**調用函數add()*/
return y /**返回y值*/
}
returnFifteen() /**調用函數returnFifteen()*/
在Swift中,函數是一種基礎資料型別 (Elementary Data Type),這就意味著,一個函數,可以將另一個函數作為它的傳回值.
func makeIncrementer() -> (Int -> Int) { /**定義函數makeIncrementer,參數空,傳回值為(int->int)*/
func addOne(number: Int) -> Int { /**定義函數addOne(),參數為number,傳回值類型為int*/
return 1 + number
}
return addOne /**將函數addOne作為傳回值,返回*/
}
var increment = makeIncrementer()
increment(7)
在Swift中,一個函數也可以接收另一個函數來當做它的參數.
func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, lessThanTen)
/**********後續有更新,敬請關注*********/