Swift心得笔记之函数

2020-01-08 22:50:29丽君

 

复制代码
// 交换两个值的函数
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