我正在查看我在GitHub上分享的代码。有一个我感兴趣的功能,特别是它的语法:它在调用SpriteKit函数后在花括号内有代码。这是(基本上)它的样子:
func selectBox(box: GuessingBox) {
// I'll omit the stuff that doesn't relate to my question
box.flip(scaleX: boxEnlargingScale) {
// Scale the box back to the original scale.
box.run(scaleBackAndWait) {
// Check if the round should end.
if !box.isCorrect {
// A failure box is chosen.
self.showAllResults(isSuccessful: false)
}
// Omitted code
}
正如您所看到的,在调用box.flip()和box.run()之后,还有更多代码在花括号中。由于我是Swift的新手,我想知道更多关于这种语法是如何工作的:它是嵌套函数吗?花括号内的代码只能在特定条件下运行吗?或者,它只是简单地在每个单独的行中键入每行代码而没有大括号(如下所示)?
box.flip(scaleX: boxEnlargingScale)
box.run(scaleBackAndWait)
if !box.isCorrect {
// ...
}
答案 0 :(得分:2)
这种语法可能看起来像一个嵌套函数,但它实际上就是"尾随闭包语法",它是传递闭包的另一种方法作为函数参数。您可能已经看到sort()
的一个例子:
myIntegers.sort { $0 < $1 }
相当于:
myIntegers.sort(by: { $0 < $1 })
正如您现在所知,删除大括号会从根本上改变您所询问的代码的含义。