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

标签 ios swift sprite-kit

在查看 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”。有谁知道那些是什么/它们的用途是什么?

最佳答案

这是一个闭包定义,它捕获三个变量,其参数是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

关于ios - 查看 Apple 的 "Adventure Game"教程 "in"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28098109/

相关文章:

ios - NSManagedObjectContext 死锁

sprite-kit - SpriteKit 中的顶点着色器

iphone - cocos2d中如何推送场景并传递参数

ios - 每个构建不同的文件

ios - 如果我为表格 View 单元格设置动画,表格 View 滚动不会停止

ios - 是否可以修复抗锯齿 SKShapeNodes 的模糊性?

ios - SKLightNodes 导致 SpriteKit 中的帧速率问题

iphone - cocos2d场景dealloc

ios - 加载组 channel 时加载 channel 错误800101 Sendbird

iOS9 联系人框架从新保存的联系人中获取标识符