📅  最后修改于: 2023-12-03 15:24:23.268000             🧑  作者: Mango
在 Swift 中,我们可以通过闭包(也称为“匿名函数”或“lambda 表达式”)来为变量设置匿名函数。闭包是一种可以捕获并存储其所在上下文中任意常量和变量值的功能强大的函数。
下面是一些使用匿名函数的示例。
我们可以使用 let
或 var
关键字将一个闭包赋值给变量:
let greeting = {
print("Hello, world!")
}
greeting() // 输出 "Hello, world!"
我们可以在函数定义中将闭包作为一个参数传递:
func performAction(_ action: () -> Void) {
print("Performing action...")
action()
}
performAction({
print("This is the action.")
})
也可以将闭包转换为尾随闭包的形式:
performAction() {
print("This is the action.")
}
我们可以从闭包中返回一个值:
let sum = { (a: Int, b: Int) -> Int in
return a + b
}
let result = sum(2, 3)
print(result) // 输出 "5"
我们可以省略闭包中的返回类型,由编译器自动推断:
let sum = { (a: Int, b: Int) in
return a + b
}
let result = sum(2, 3)
print(result) // 输出 "5"
或者,我们可以简化闭包甚至不用指定参数类型和返回类型:
let sum = { $0 + $1 }
let result = sum(2, 3)
print(result) // 输出 "5"
闭包可以捕获上下文中的任何常量或变量的值,并保留其状态,直到闭包被销毁。例如:
func makeIncrementer(forIncrement amount: Int) -> () -> Int {
var runningTotal = 0
func incrementer() -> Int {
runningTotal += amount
return runningTotal
}
return incrementer
}
let incrementByTen = makeIncrementer(forIncrement: 10)
print(incrementByTen()) // 输出 "10"
print(incrementByTen()) // 输出 "20"
print(incrementByTen()) // 输出 "30"
在这个示例中,我们定义了一个名为 makeIncrementer(forIncrement:)
的函数,它返回一个函数,该函数可以将其每次调用时所传递的整数累加到其内部状态变量 runningTotal
中。我们调用 makeIncrementer(forIncrement:)
两次,并将两个返回的函数赋值给不同的常量,然后按顺序调用它们三次,每次都会增加内部状态。