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

时间:2015-01-22 20:30:01

标签: ios swift sprite-kit

在使用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;。有谁知道它们是什么/它们用于什么?

2 个答案:

答案 0 :(得分:6)

这是一个闭包定义,它捕获三个变量,其参数为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, { $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应用程序 - 他太棒了