我知道可以定义接受这样的闭包的方法:
一个。单闭合作为输入参数
func testOfClosures (flag: Int, closure1: () -> ())
{
closure1()
}
B中。多个闭包作为输入参数
func testOfClosures (flag: Int, closure1: () -> (), closure2: () -> (), closure3: () -> ())
{
switch flag
{
case 1:
closure1()
case 2:
closure2()
default:
closure3()
}
}
有趣的是,在第一种情况下,我们可以像这样调用它:
testOfClosures(1){
println("print closure 1")
}
但在第二种情况下,我们不能像这样调用它:
testOfClosures(1,{
println("print closure 1")
},
{
println("print closure 2")
})
{
println("print closure 3")
}
我们必须像这样调用它:
testOfClosures(1,{
println("print closure 1")
},
{
println("print closure 2")
},
{
println("print closure 3")
})
有什么理由吗?
答案 0 :(得分:5)
看起来尾随闭包语法对开头{
的位置非常具体,并要求它与结束)
以下作品
testOfClosures(1,{
println("print closure 1")
},
{
println("print closure 2")
}) {
println("print closure 3")
}
就多个尾随闭包而言,这是不可能的。该文档仅使用特殊语法将最终闭包声明。
答案 1 :(得分:3)
是的,自 Swift 5.3 开始,您就可以这样做。
请参见此示例
// Multiple trailing closure arguments
UIView.animate(withDuration: 0.3) {
self.view.alpha = 0
} completion: { _ in
self.view.removeFromSuperview()
}
中的信用和更多信息