Swift函数定义、函数重载、函数类型、高阶函数

Swift函数和闭包

函数定义

首先看一个函数的定义。其中a,b是参数标签,调用函数时需要加上参数标签

func sum(a num1: Int, b num2: Int) -> Int {
    return num1 + num2
}
//
sum(a: 1, b:2)

可以使用“”省略参数标签。使用""后调用时不需要参数也不需要标签

func sum(_ num1: Int, _ num2: Int) -> Int {
    return num1 + num2
}
let b = sum(3, 4)

也可以直接不用参数标签位,但是无参数标签是,默认参数标签为参数名

func sum(num1: Int, num2: Int) -> Int {
    return num1 + num2
}
let b = sum(num1: 4, num2: 5)

如果整个函数体是单一表达式,那么函数会隐式返回这个表达式,不需要加return

func sum(num1: Int, num2: Int) -> Int {
    num1 + num2
}
let b = sum(num1: 4, num2: 5)

参数可以有默认参数值,在调用时有默认值得参数可以不传值

func sum(num1: Int = 4, num2: Int) -> Int {
    num1 + num2
}
let b = sum(num1: 4, num2: 5)
let a = sum(num2: 6)

Swift中支持可变参数,如下num1可以传多个整数。需要注意的是1、一个函数最多只能有一个可变参数;2、紧跟在可变参数后面的参数不能省略参数标签

func sum(num1: Int...) -> Int {
    var total = 0
    for a in num1 {
        total += a
    }
    return total
}
print(sum(num1: 10,20,30,40))

可以使用inout定义一个输入输出参数,可以在函数内部修改外部实参的值。1、可变参数不能标记为inout;2、inout参数不能有默认值;3、inout参数需要是可以赋值的变量;4、函数调用时inout参数前面需要加&,传递地址

func sum(num1: inout Int, num2: Int) -> Int {
    num1 = num1 + num2
    return num1
}
var num = 4
sum(num1: &num, num2: 3)
print(num) //7

函数的重载

  • 函数名相同
  • 参数个数不同
  • 参数类型不同
  • 参数标签不同
  • 返回值类型与函数重载无关

函数类型

函数类型有形式参数类型和返回值类型组成,函数类型可以作为函数参数,或者函数返回值。可以使用typealias给函数类型起别名。具体细节看下面代码备注

函数类型作为函数参数

//类型(Int, Int) -> Int 的函数
func sum(num1: Int, num2: Int) -> Int {
    num1 + num2
}

func difference(num1: Int, num2: Int) -> Int {
    num1 - num2
}

///sum1:类型(Int, Int) -> Int 的函数
///num3:Int型数
///return 整数
func sums(sum1: (Int, Int) -> Int, num3: Int) -> Int {
    //此处函数体为 给参数sum1传参num3,num3。
    //返回 sum1 的结果
    return sum1(num3,num3)
}

//调用函数sums,参数1 为上面sum函数,参数2 为 4。返回值为 8
let result = sums(sum1: sum(num1:num2:), num3: 4)

//调用函数sums,参数1 为上面difference函数,参数2 为 4。返回值为 0
let result1 = sums(sum1: difference(num1:num2:), num3: 4)

函数类型作为函数返回值

你可能感兴趣的:(Swift函数定义、函数重载、函数类型、高阶函数)