本文概述
Swift闭包是其他类型的Swift函数, 无需使用关键字func和函数名称即可进行定义。
和Swift函数一样, swift闭包也可以接受参数并返回值。它还包含一组语句, 这些语句在调用后执行, 并且可以作为函数分配给变量/常量。
使用Swift闭包的原因
使用快速关闭的主要原因主要有两个:
完成区块
当某些任务完成执行时, 闭包用于提供通知。
高阶函数
闭包可以作为高阶函数的输入参数传递。高阶函数只是一种接受函数作为输入并返回类型函数的值作为输出的函数类型。在这种情况下, 使用闭包是因为闭包忽略了func关键字和函数名, 这使代码更易读和简短。
句法:
{ (parameters) -> return type in
statements
}
在这里, in是一个关键字, 用于分隔闭包内部的返回类型和语句。闭包可以接受参数并返回值。
让我们创建自己的闭包:
例:
简单关闭
let simpleClosure = {
}
simpleClosure()
在这里, 我们声明了一个简单的闭包{}, 该闭包不包含任何参数, 不包含任何语句, 并且不返回任何值。此闭包分配给常量simpleClosure。
包含语句的闭包
例:
let simpleClosure = {
print("Hello srcmini")
}
simpleClosure()
输出
Hello srcmini
在上面的程序中, 我们定义了一个名为simpleClosure的闭包, 该闭包被推断为()->(), 因为它不接受任何参数并且不返回任何值。
包含参数的闭包
例:
let simpleClosure:(String) -> () = { name in
print(name)
}
simpleClosure("Hello srcmini")
输出
Hello srcmini
在上面的程序中, 类型闭包(String)->()接受类型为string的输入, 但不返回值。要使用在闭包语句内部传递的值, 我们放置了一个参数名称, 名称后跟in关键字。
在这里, 闭包接受一个String, 我们需要在将闭包称为simpleClosure(” Hello srcmini”)时传递该字符串。
闭包返回值
闭包可以返回诸如函数之类的值。要从闭包中返回一个值, 我们必须显式添加该类型以在大括号()中返回, 后跟->。
例:
let simpleClosure:(String) -> (String) = { name in
let greeting = "Hello srcmini " + "A platform for all technologies"
return greeting
}
let result = simpleClosure("Hello srcmini")
print(result)
输出
Hello srcmini A platform for all technologies
你可以看到在上面的程序中我们将类型定义为simpleClosure:(String)->(String), 因为Swift无法自动推断出返回值的闭包。类型(String)->(String)指定闭包接受String类型的输入, 并返回String类型的值。