Function 函數
Swift使用func關鍵字來聲明函數,函數通過函數名加小括弧內的參數列表來調用。使用->來區分參數名和傳回值的類型:
func greet(name: String, day: String) -> String { return "Hello \(name), today is \(day)."} greet("Bob", "Tuesday")
練習:
remove day參數,增加一個參數,比如:今天的午餐特色菜~
func greet(name:String, day:String) -> String{ return "Hello \(name), today is \(day)." //第二章說過用\()來內嵌變數 } greet('Joe', '菩提玉齋')
函數使用元組(tuple)來返回多個值:
1 func getGasPrices() -> (Double, Double, Double) {
2 return (3.59, 3.69, 3.79)
3 }
4 getGasPrices()
函數還可以接收可變的參數個數,將這些參數收集在數組裡面:
func sumOf(numbers: Int...) -> Int { var sum = 0 for number in numbers { sum += number } return sum } sumOf() sumOf(42, 597, 12)
練習:
編寫一個函數並求出其參數的平均值。
查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/extra/
函數是可以嵌套的,嵌套過的函數可以訪問到外部函式宣告過的變數,使用函數嵌套可以便於你組織過長或複雜的函數:
func returnFifteen() -> Int { var y = 10 func add() { y += 5 } add() return y } returnFifteen()
在Swift中,函數是第一等類型,這意味著一個函數可以將另外一個函數作為它的傳回值:
func makeIncrementer() -> (Int -> Int) { func addOne(number: Int) -> Int { return 1 + number } return addOne } var increment = makeIncrementer() increment(7)
函數還能接收其它函數作為它的參數:
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)
Closure 閉包
函數其實是一種閉包的特殊情況,你可以寫一個用花括弧{}包裹的匿名閉包,用in來區分參數與主體的傳回型別:
1 numbers.map({
2 (number: Int) -> Int in
3 let result = 3 * number
4 return result
5 })
練習:
重寫這個閉包來對所有奇數返回0
閉包有多種簡潔的寫法。當傳回值類型已知時,比如委託回調,你就可以省略它的參數類型,它的傳回值類選,或者二者都略去,單行語句的閉包可以直接隱式地返回此一語句的值:
1 numbers.map({ number in 3 * number })
你可以通過數字而不是名字來引用一個參數,這對於很短的閉包非常有用。一個閉包通過圓括弧傳遞其最後一個參數到函數能立即生效:
1 sort([1, 5, 3, 12, 2]) { $0 > $1 }
作者:cnblogs Joe.Huang