查看 Apple 的 "Adventure Game" 教程 "in" 是什么意思?

looking at Apple's "Adventure Game" tutorial what does "in" mean?

在看Apple使用SpriteKit的教程冒险游戏的源代码时,我一直看到变量被声明,声明后有左括号,还有"in"这个词。

这是我使用的代码:

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

就这样,"dpad, x, y in"。有谁知道那些 are/what 它们的用途吗?

这是一个闭包定义,它捕获三个变量,其参数为dpadxyin 声明闭包执行的代码的实际开始。变量的值由调用者提供。

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

var foo : (Array<Int> -> Int)?

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

foo = { for every int in array -> sum }

问题是,如何访问数组?这是,当模式匹配跳入时,例如

foo = { numbers [...] }

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

foo = { numbers in return numbers.reduce(0, { [=13=] +  }) }

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

为了完整起见,您现在可以通过

来调用它
let x = foo?([1, 2, 3]) // x = 6

这是一个闭包。它的结构基本上像一个函数。

一个函数是

func ( dpad:Cgpoitn,x:cgfloat, y:cgfloat)->(void){
//code 
}

闭包只是结构不同。

{dpad,x,y in 
//the code
}

转到 34 分钟 00 并观看接下来的 2 分钟,并且很好地解释了关闭 https://www.youtube.com/watch?v=QLJtT7eSykg -- paul hegarty:在 iTunes U 上开发 iOS 应用 swift - 他很棒