【发布时间】:2016-07-07 09:48:17
【问题描述】:
我是快速编程开发的新手。我想知道如何将一个闭包传递给另一个闭包。
swift中的闭包和objective中的block有什么区别吗?
【问题讨论】:
-
你可以声明函数类型的变量,并随心所欲地使用这个变量。
-
闭包是对块的替换,并不完全相同。你可以参考这个答案stackoverflow.com/questions/33591777/…
我是快速编程开发的新手。我想知道如何将一个闭包传递给另一个闭包。
swift中的闭包和objective中的block有什么区别吗?
【问题讨论】:
闭包可以看作任何其他(非闭包)类型。这意味着您可以构造一个闭包,其中闭包的参数描述另一种闭包类型。
例如
let sendMeAClosure: ((Int) -> String) -> () = {
print($0(42)) /* ^^^^^^^^^^^^^^^- argument of sendMeAClosure
is a closure itself */
}
let myClosure: (Int) -> String = {
return "The answer is \($0)."
}
sendMeAClosure(myClosure) // The answer is 42
请注意,Swift 中的函数只是一种特殊类型的闭包,因此您不妨向上面的sendMeAClosure 提供一个函数引用(其签名与参数类型匹配)。
/* sendMeAClosure as above */
func myFunc(arg: Int) -> String {
return "The answer is \(arg)."
}
sendMeAClosure(myFunc) // The answer is 42
关于您的第二个问题,请参阅以下问答
【讨论】: