1.使用 func 声明一个函数。调用函数使用他的名字加上小括号中的参数列表。使用 -> 分隔参数的名字和返回值类型
func greet(name: String, day: String) -> String {
return "Hello \(name), today is \(day)."
}
greet("Bob", "Tuesday")
2.使用元组(tuple)来返回多个值。
func getGasPrices() -> (Double, Double, Double) {
return (3.59, 3.69, 3.79)
}
getGasPrices()
3.函数可以接受可变参数个数,收集到一个数组中。
func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf()
sumOf(42, 597, 12)
4.函数可以嵌套。内嵌函数可以访问其定义所在函数的变量。你可以使用内嵌函数来组织代码,避免过长和过于复杂。
1 func returnFifreen() ->Int{ 2 var y = 10 3 func add(){ 4 y += 5 5 } 6 7 add() 8 return y 9 } 10 11 returnFifteen()
5.函数是第一类型的。这意味着函数可以返回另一个函数。
func makeIncrementer() -> (Int -> Int){ func addOne(number:Int) ->Int{ return 1 + number } return addOne } var increment = makeIncrementer()//把一个函数赋的地址赋给另外一个变量increment(7)
6.一个函数可以接受其他函数作为参数。
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(number,lessThanTen)
函数闭包
7.函数实际是闭包的特殊情况。你可以写一个闭包而无需名字,只需要放在大括号中即可。使用 in 到特定参数和主体的返回值。
numbers.map({ (number:Int) -> Int in let result = 3 * number return result })
编写闭包时有多种选项。当一个闭包的类型是已知时,例如代表回调,你可以忽略其参数和返回值,或两者。单一语句的闭包可以直接返回值。
numbers.map({number in 3 * number})
你可以通过数字而不是名字来引用一个参数,这对于很短的闭包很有用。一个闭包传递其最后一个参数到函数作为返回值。
sort([1, 5, 3, 12, 2]) { $0 > $1 }