复制代码
// 交换两个值的函数
func valueSwap<T>(inout value1: T, inout value2: T) {
let oldValue1 = value1
value1 = value2
value2 = oldValue1
}
var name1 = "Mr. Potato"
var name2 = "Mr. Roboto"
valueSwap(&name1, &name2) // 交换字符串
name1 // Mr. Roboto
name2 // Mr. Potato
var number1 = 2
var number2 = 5
valueSwap(&number1, &number2) // 交换数字
number1 // 5
number2 // 2
函数类型
在 Swift 中,函数翻身把歌唱,终于成了一等公民,和其他类型平起平坐。
变量
我们可以定义一个变量,这个变量的类型是函数类型:
复制代码
func addTwoInts(a: Int, b: Int) -> Int {
return a + b
}
let anotherMathFunction = addTwoInts
anotherMathFunction(1,2) // 3
参数
函数既然是类型的一种,那么显然也是可以作为参数传递的:
复制代码
func addTwoInts(a: Int, b: Int) -> Int {
return a + b
}
func printMathResult(mathFunction: (Int, Int) -> Int, a: Int, b: Int) {
println("Result: (mathFunction(a, b))")
}
printMathResult(addTwoInts, 3, 5) // 将参数2和参数3作为参数传给参数1的函数
返回值
函数也是可以作为结果返回的。比如返回的值是一个参数为 Int 返回值为 Int 的函数,就是这样定义:func foo() -> (Int) -> Int。可以看下面这个具体的例子:
复制代码
func stepForward(input: Int) -> Int {
return input + 1
}
func stepBackward(input: Int) -> Int {
return input - 1
}
func chooseStepFunction(backwards: Bool) -> (Int) -> Int {
return backwards ? stepBackward : stepForward
}
var currentValue = 3








