看看Apple的"冒险游戏"教程"in in"是什么意思?

Mah*_*ray 2 ios sprite-kit swift

在使用Apple的SpriteKit查看教程冒险游戏的源代码时,我一直看到变量被声明,并且在声明它们之后有开括号和单词"in".

这是我正在使用的代码:

 let rightThumbstickHandler: GCControllerDirectionPadValueChangedHandler = { dpad, x, y in
        let length = hypotf(x, y)
        if length <= 0.5 {
            player.heroFaceLocation = nil
            return
        }
Run Code Online (Sandbox Code Playgroud)

就像那样,"dpad,x,y in".有谁知道它们是什么/它们用于什么?

Seb*_*ler 6

这是一个封闭的定义捕捉三个变量,其参数为dpad,xy.该in声明封闭执行该代码的实际开始.变量的值由调用者提供.

更新:in帮助标记代码的开始,即假设你有以下可选的闭包变量:

var foo : (Array<Int> -> Int)?
Run Code Online (Sandbox Code Playgroud)

现在,您希望在代码中实际定义它并且您想要实现(伪代码):

foo = { for every int in array -> sum }
Run Code Online (Sandbox Code Playgroud)

问题是,你如何访问阵列?这就是,当模式匹配跳跃时,例如

foo = { numbers [...] }
Run Code Online (Sandbox Code Playgroud)

这里,数组将被赋值给一个名为的不可变变量numbers.在此之后,您可以直接编写代码,但是如何通过模式匹配和局部变量区分调用者的变量赋值?这就是,当in你发挥作用时,例如你会写

foo = { numbers in return numbers.reduce(0, { $0 + $1 }) }
Run Code Online (Sandbox Code Playgroud)

现在,很明显,后面的所有内容都in将在闭包内用于计算.此外,通过查看闭包变量的初始定义,您还将知道numbers将是什么类型.

为了完整起见,您现在可以通过此方式调用此方法

let x = foo?([1, 2, 3]) // x = 6
Run Code Online (Sandbox Code Playgroud)