Swift使用func
关键字定义函数,然后与C语言一样使用函数名进行调用,而函数返回值类型用->
标示。
func greet(name: String, day: String) -> String {
return "Hello \(name), today is \(day)."
}
greet("Bob", "Tuesday")
试验
移除day
参数,添加一些别的信息
使用元组从函数中返回多个值。
func getGasPrices() -> (Double, Double, Double) {
return (3.59, 3.69, 3.79)
}
getGasPrices()
Swift的函数可以接受可变参数。
func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf()
sumOf(43, 597, 12)
试验
编写一个计算参数平均值的函数
Swift的函数可以进行嵌套。被嵌套的函数可以访问外面函数定义的变量。
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)
实际上Swift中的函数是闭包的一个特例。我们可以使用没有名字的{}
来定义闭包,而闭包内容与返回值类型之间用in
进行分隔。
numbers.map({
(number: Int) -> Int in
let result = 3 * number
return result
})
试验
重写上面的闭包,使得所有的奇数都返回0
还有几种方式可以使得闭包的编写更加简洁。当闭包的类型是已知的,比如作为回调或者代理的时候,你可以省略参数类型或者返回值类型。如下:
numbers.map({ number in 3 * number })
在闭包中还可以使用位置来引用参数,这在编写非常短的闭包的时候比较有用。当闭包作为函数的最后一个参数时,可以将它放在函数的圆括号后面。
sort([1, 5, 3, 12, 2]){ $0 > $1 }