在使用Apple的SpriteKit查看教程冒险游戏的源代码时,我一直看到变量被声明,并且在声明它们之后有开括号,并且"在"中。
这是我正在使用的代码:
let rightThumbstickHandler: GCControllerDirectionPadValueChangedHandler = { dpad, x, y in
let length = hypotf(x, y)
if length <= 0.5 {
player.heroFaceLocation = nil
return
}
就像那样,&#34; dpad,x,y in&#34;。有谁知道它们是什么/它们用于什么?
答案 0 :(得分:6)
这是一个闭包定义,它捕获三个变量,其参数为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
答案 1 :(得分:1)
这是一个关闭。它基本上像一个函数结构。
一个功能
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上使用swift开发iOS应用程序 - 他太棒了