Rud*_*ger 8 closures function swift
这是一个函数还是一个闭包?
let triple: Int -> Int = {
(number: Int) in // What is this?
let result = 3 * number
number
return result
}
triple(1)
Run Code Online (Sandbox Code Playgroud)
Mic*_*lum 10
1:这是一个关闭.
例子:
func aFunction() -> () {
// do something
}
let aClosure:() -> () = {
// do something
}
Run Code Online (Sandbox Code Playgroud)
函数实际上是闭包的特例.您可以使用大括号({})来编写没有名称的闭包.用于将参数和返回类型与正文分开.
摘录自:Apple Inc."The Swift Programming Language."iBooks.https://itun.es/us/jEUH0.l
2:"in"只是选择用于表示参数/返回类型结束的位置,以及闭包的主体开始的符号.它与inout无关.
这将闭包绑定到常量triple,如果在全局范围内完成,则类似于将其声明为函数(请参阅下面的Eric对差异的评论).该(number: Int) in行声明了闭包的输入参数.
在这种情况下,类型可以省略,因为它可以从闭包类型中推断出来,并且因为它只有一个语句,所以它可以写成一个隐式返回的闭包表达式:
let triple: Int -> Int = { number in
3 * number
}
// or as a function
func triple(number: Int) -> Int {
return 3 * number
}
// Or as the very short
let triple: Int -> Int = { 3 * $0 }
Run Code Online (Sandbox Code Playgroud)
您可以在关于闭包的官方文档章节中阅读更多相关信息.
快速关闭的定义如下:
{ (parameters) -> return type in
statements
}
Run Code Online (Sandbox Code Playgroud)
因此,根据定义,您的代码示例被视为闭包。但是,我将通过在花括号内移动返回类型来重写它,如下所示:
let triple = {
(number: Int) -> Int in
let result = 3 * number
number
return result
}
triple(1)
Run Code Online (Sandbox Code Playgroud)
参数和返回类型在打开花括号之后开始,在in关键字之前结束,而闭包主体在in关键字之后开始,并在关闭花括号处结束。接下来,我建议从iTunes下载和阅读iBook,可以在以下位置找到该书:
https://itunes.apple.com/cn/book/swift-programming-language/id881256329?mt=11