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