在查看 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”。有谁知道那些是什么/它们的用途是什么?
最佳答案
这是一个闭包定义,它捕获三个变量,其参数是dpad
、x
和y
。 in
声明闭包执行的代码的实际开始。变量的值由调用者提供。
更新:in
有助于标记代码的开头,即假设您有以下可选闭包变量:
var foo : (Array<Int> -> Int)?
现在,您想在代码中实际定义它并实现(伪代码):
foo = { for every int in array -> sum }
问题是,如何访问数组?这是,当模式匹配跳入时,例如
foo = { numbers [...] }
在这里,数组将被分配给一个名为numbers
的不可变变量。在此之后您可以直接编写代码,但是您希望如何区分调用者通过模式匹配和局部变量分配的变量?这就是当 in
发挥作用时,例如你会写
foo = { numbers in return numbers.reduce(0, { $0 + $1 }) }
现在,很明显,in
之后的所有内容都将在闭包内用于计算。此外,通过查看闭包变量的初始定义,您还将了解 numbers
的类型。
为了完整起见,您现在可以通过以下方式调用它
let x = foo?([1, 2, 3]) // x = 6
关于ios - 查看 Apple 的 "Adventure Game"教程 "in"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28098109/