Swift:运行代码而不使用" func"保留字

时间:2018-01-15 19:14:50

标签: swift

我正在查看我在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 {
    // ...
}

1 个答案:

答案 0 :(得分:2)

这种语法可能看起来像一个嵌套函数,但它实际上就是"尾随闭包语法",它是传递闭包的另一种方法作为函数参数。您可能已经看到sort()的一个例子:

myIntegers.sort { $0 < $1 }

相当于:

myIntegers.sort(by: { $0 < $1 })

正如您现在所知,删除大括号会从根本上改变您所询问的代码的含义。