Skip to content

函数

定义

使用 func 关键字声明函数

swift
func fun1() {
    print("输出")
}

fun1()

func fun2(name: String) {
    print("输出", name)
}

fun2(name: "张三")

func fun3(name: String) -> String {
    return name + "你好"
}

print(fun3(name: "李四"))

func fun4(name: String, age: Int) -> (name: String, age: Int) {
    return (name + "你好", age + 12)
}

let (n, a) = fun4(name: "张三", age: 22)

print(n, a) // 张三你好 34

参数别名

提供形参的函数名,只对外部访问

下面例子中,外部参数只能叫 cname,函数内部使用参数只能使用 name

swift
func fun(cname name: String) {
    print("输出", name)
}

fun(cname: "张三")

如果想要去除参数名,可以使用 _ 来代替

swift
func fun(_ num1: Int, _ num2: Int) {
    print(num1 + num2)
}

fun(1, 2)

多个参数

传递多个参数使用 ... 收集成为一个数组

swift
func fun(_ num: Int...) -> Int{
    // print(num1)
    var res = 0

    for i in num {
      res += i
    }

    return res
}

var r = fun(1, 2, 3, 4, 5, 6)

print(r) // 21

参数默认值

函数参数可以设置默认值

swift
func fun(num: Int = 10) -> Void{
   print(num + 2)
}

fun(num: 12) // 14

修改函数参数

函数传入的参数默认是使用 let 关键字声明的,函数内部是不能修改参数的,如果希望修改参数,则需要使用 inout 关键字修饰参数,并且在传递参数的时候使用 & 修饰

swift
func fun(num: inout Int) {
  num += 1
}

var a = 10

fun(num: &a)

print(a) // 11

闭包

闭包可以使用变量接受然后调用,类似 js 中的函数声明

swift
let fn = {
  print("hello")
}

fn()

闭包传递参数,参数名 + in 关键字分隔

swift
let fn2 = {(name: String) in
  print("你好\(name)")
}

fn2("张三")

闭包返回值可以省略 return 关键字

swift
let fn3 = {(n: Int, v: Int) -> Int in
  n + v
}

let fn4 = {() -> String in
  "哈哈哈"
}

print(fn3(3, 6)) // 9
print(fn4()) // 哈哈哈

高阶函数

以函数作为参数

swift
func fn4(callback: () -> Void) {
  callback()
}

let run = {
  print("匿名函数")

}

fn4(callback: run)

fn4 {
  print("执行了")
}

函数作为返回值

swift
func fun6 () -> (Int) -> Void {
  return {
    print("接收到的数字是\($0)")
  }
}

let c = fun6()

c(66666)