Swift使用(三)函数定义、函数重载、函数类型、高阶函数
2020-12-25 本文已影响0人
iOS小洁
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)
函数类型作为函数返回值