swift从入门到精通03-函数

239 阅读2分钟

函数的定义

函数可以理解为封装的方法,swift中使用 func 来定义函数。

例子:

func sayhello() {
    print("你好")
}

func sum (a: Int, b: Int) -> Int {
    return a + b
}

2.隐式返回

如果函数是单一表达式,我们可以直接省略 return。

例子:

func sum (a: Int, b: Int) -> Int {
    a + b
}

3.实现返回多值

在oc中,只能返回单一的值,swift已元组方式可以返回多个值。

例子:

func sumAndSubtract(a: Int, b: Int) -> (Int,Int) {
    return (a + b,a - b)
}

4.参数标签和默认值

我们可以给传参定义一个标签,和给参数赋予默认值。如果用 _ 符号,代表不用显示参数名。

例子:

func sum(bq a: Int,_ b: Int = 3) {
    a + b
}
sum(bq: 1, 2)
sum(bq: 1)

5.可变参数

一个函数最多只有1个可变参数,可变参数相当于是传多个值,值是没有固定的,可以理解为传递一个数组(实际不是数组)。

例子:

func sum(nums: Int...) -> Int {
    var result = 0
    for num in nums {
        result += num
    }
    return result
}

sum(nums: 1,2,3)
sum(nums: 1,2,3,4,5)

6.输入输出函数

我们可以用inout来定义一个输入输出函数,可以在函数内部修改函数的值。inout 参数的本质是地址传递。

例子:

func swapValue(a: inout Int, b: inout Int){
    let tmp = a
    a = b
    b = tmp
}

var a = 5
var b = 10
swapValue(a: &a, b: &b)

7.函数重载

函数重载规则是函数名相同,参数个数不同,参数类型不同,参数标签不同。

例子:

//对比参数
func sum(a: Int, b: Int) {
    a + b
}

//参数个数不同
func sum(a: Int, b: Int, c: Int){
    a + b + c
}

//参数类型不同
func sum(a: Double, b: Double) -> Double {
    a + b
}

//标签不同
func sum(c: Int, d: Int) {
    c + d
}

8.函数类型

1.函数类型定义

每一个函数都有类型,函数类型由参数类型和返回值类型组成

例子:

//函数类型 () -> Void
func sayhello() {
    print("你好")
}

//函数类型 (Int,Int) -> Int
func sum(a: Int , b: Int) -> Int {
    a + b
}

2.函数类型作为函数参数

例子:

func subtract(a: Int, b: Int) -> Int {
    a - b
}

func sum(a: Int, b: Int) -> Int {
    a + b
}

//函数类型 (Int,Int) -> Int
func test(a: Int, b: Int, fun:(Int,Int) -> Int) -> Int {
    return fun(a,b)
}

test(a: 5, b: 3, fun: subtract)
test(a: 5, b: 3, fun: sum)

3.函数类型作为函数返回值

例子:

func sum (a: Int, b: Int) -> Int {
    return a + b
}
func test() -> (Int,Int)->Int {
    return sum
}

test()(2,3)

9.嵌套函数

嵌套函数即把函数定义在函数内部。

例子:

func sum(a: Int, b: Int) -> Int {
    func subtract(a: Int, b: Int) -> Int {
        a - b
    }
    let c = subtract(a: a, b: b)
    return a + b + c
}


下一遍文章:swift从入门到精通04-枚举

上一遍文章:swift从入门到精通02-流程控制