Function 函數
Swift使用func關鍵字來聲明函數,函數通過函數名加小括號內的參數列表來調用。使用->來區分參數名和返回值的類型:
1 func greet(name: String, day: String) -> String {2 return "Hello /(name), today is /(day)."3 }4 greet("Bob", "Tuesday")
練習:
remove day參數,增加一個參數,比如:今天的午餐特色菜~
1 func greet(name:String, day:String) -> String{2 3 return "Hello /(name), today is /(day)." //第二章說過用/()來內嵌變量4 5 }6 7 greet('Joe', '菩提玉齋')
函數使用元組(tuple)來返回多個值:
函數還可以接收可變的參數個數,將這些參數收集在數組里面:
1 func sumOf(numbers: Int...) -> Int {2 var sum = 03 for number in numbers {4 sum += number5 }6 return sum7 }8 sumOf()9 sumOf(42, 597, 12)
練習:
編寫一個函數并求出其參數的平均值。
函數是可以嵌套的,嵌套過的函數可以訪問到外部函數聲明過的變量,使用函數嵌套可以便于你組織過長或復雜的函數:
1 func returnFifteen() -> Int {2 var y = 103 func add() {4 y += 55 }6 add()7 return y8 }9 returnFifteen()
在Swift中,函數是第一等類型,這意味著一個函數可以將另外一個函數作為它的返回值:
1 func makeIncrementer() -> (Int -> Int) {2 func addOne(number: Int) -> Int {3 return 1 + number4 }5 return addOne6 }7 var increment = makeIncrementer()8 increment(7)
函數還能接收其它函數作為它的參數:
1 func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool { 2 for item in list { 3 if condition(item) { 4 return true 5 } 6 } 7 return false 8 } 9 func lessThanTen(number: Int) -> Bool {10 return number < 1011 }12 var numbers = [20, 19, 7, 12]13 hasAnyMatches(numbers, lessThanTen)
Closure 閉包
函數其實是一種閉包的特殊情況,你可以寫一個用花括號{}包裹的匿名閉包,用in來區分參數與主體的返回類型:
1 numbers.map({2 (number: Int) -> Int in3 let result = 3 * number4 return result5 })
練習:
重寫這個閉包來對所有奇數返回0
閉包有多種簡潔的寫法。當返回值類型已知時,比如委托回調,你就可以省略它的參數類型,它的返回值類選,或者二者都略去,單行語句的閉包可以直接隱式地返回此一語句的值:
1 numbers.map({ number in 3 * number })
你可以通過數字而不是名字來引用一個參數,這對于很短的閉包非常有用。一個閉包通過圓括號傳遞其最后一個參數到函數能立即生效:
1 sort([1, 5, 3, 12, 2]) { $0 > $1 }
謝謝,Swifter-QQ群:362232993,同好者進~
github地址:https://github.com/Joejo/Swift-lesson-for-chinese
新聞熱點
疑難解答