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