Swift函数和闭包
函数
Swift 使用func
关键字声明函数:
1 func greet (name: String, day: String) -> String {
2 return "Hello \(name), today is \(day)."
3 }
4 greet ("Bob", "Tuesday")
通过元组(Tuple)返回多个值:
1 func getGasPrices () -> (Double, Double, Double) {
2 return (3.59, 3.69, 3.79)
3 }
4 getGasPrices ()
支持带有变长参数的函数:
1 func sumOf (numbers: Int...) -> Int {
2 var sum = 0 for number in numbers {
3 sum += number
4 }
5 return sum
6 }
7 sumOf ()
8 sumOf (42, 597, 12)
函数也可以嵌套函数:
1 func returnFifteen () -> Int {
2 var y = 10
3 func add () {
4 y += 5
5 }
6 add ()
7 return y
8 }
9 returnFifteen ()
作为头等对象,函数既可以作为返回值,也可以作为参数传递:
1 func makeIncrementer () -> (Int -> Int) {
2 func addOne (number: Int) -> Int {
3 return 1 + number
4 }
5 return addOne
6 }
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 < 10
11 }
12 var numbers = [20, 19, 7, 12]
13 hasAnyMatches (numbers, lessThanTen)
闭包
本质来说,函数是特殊的闭包,Swift 中可以利用{}
声明匿名闭包:
1 numbers.map ({
2 (number: Int) -> Int in
3 let result = 3 * number
4 return result
5 })
当闭包的类型已知时,可以使用下面的简化写法:
1 numbers.map ({ number in 3 * number })
此外还可以通过参数的位置来使用参数,当函数最后一个参数是闭包时,可以使用下面的语法:
1 sort ([1, 5, 3, 12, 2]) { $0 > $1 }