[英]Is a closure that is passed in as a parameter assigned to the parameter name in swift?
此代码来自此博客。
是我们之所以可以调用completion()
原因,是因为() -> ()
传递的闭包实际上已分配给参数完成,因此调用完成将执行闭包?
func thisNeedsToFinishBeforeWeCanDoTheNextStep(completion: () -> ()) {
print("The quick brown fox")
completion()
}
func thisFunctionNeedsToExecuteSecond() {
print("jumped over the lazy dog")
}
如果是这样的话,请重新调用下面的函数:我不太了解下面的代码如何转换为thisFunctionNeedsToExecuteSecond()
之前被调用并完成的第一个函数? 我的意思是如何为()->()
在导致completion()
之前执行thisFunctionNeedsToExecuteSecond()
被调用-这是很难以书面形式解释这一点。
thisNeedsToFinishBeforeWeCanDoTheNextStep { () -> () in
thisFunctionNeedsToExecuteSecond()
}
如果创建的函数以闭包作为其输入参数之一,则在通过inputParameterName()
调用闭包后立即执行该闭包。 输入参数名称后面的括号标记函数调用,而闭包没有输入参数,因为在您的情况下其类型为Void->Void
。
在第二个示例中
thisNeedsToFinishBeforeWeCanDoTheNextStep { () -> () in
thisFunctionNeedsToExecuteSecond()
}
您会看到尾随的关闭。 如果函数的最后一个输入参数是闭包,则可以将函数调用转换为尾随闭包语法,在此您可以省略闭包的名称(在您的情况下为完成), {}
之间的代码将执行一次闭包被称为。
所以上面的代码相当于
thisNeedsToFinishBeforeWeCanDoTheNextStep(completion: { () -> () in
thisFunctionNeedsToExecuteSecond()
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.