如何引用函数中的变量?

时间:2015-02-05 08:43:40

标签: swift sprite-kit

如何从另一个函数(碰撞)中调用我在函数(hello)中创建的sun对象?

func collide() {
        if (CGRectIntersectsRect(player.frame, **sun.frame**)) {
            [EndGame];
        }

 func hello() {
        let sun = SKSpriteNode(imageNamed: "Sun")
}

2 个答案:

答案 0 :(得分:4)

你不能 - sun变量是hello函数的本地变量,并且它不存在于其范围之外。

如果从collide调用hello,您只需将其作为参数传递:

func collide(sun: SKSpriteNode) {
    if (CGRectIntersectsRect(player.frame, sun.frame)) {
        [EndGame];
    }
}

func hello() {
    let sun = SKSpriteNode(imageNamed: "Sun")
    ...
    collide(sun)
}

否则,如果我认为这些是类的实例方法,只需将sun变量转换为实例属性:

class Test {
    private var sun: SKSpriteNode?

    func collide(sun: SKSpriteNode) {
        if let sun = self.sun {
            if (CGRectIntersectsRect(player.frame, sun.frame)) {
                [EndGame];
            }
        }
    }

    func hello() {
        self.sun = SKSpriteNode(imageNamed: "Sun")
    }
}

答案 1 :(得分:1)

除了安东尼奥的答案,您还可以使用唯一名称搜索SKNode's children

例如。

let sun = SKSpriteNode(imageNamed:"Sun")
sun.name = "sun"
self.addChild(sun)

你可以通过

取回它
if let sun =  self.childNodeWithName("sun")
{
    //use sun here
}

childNodeWithName会返回一个可选的SKNode?