从Swift中的其他类调用函数

时间:2016-01-11 17:47:36

标签: ios swift sprite-kit

我正在尝试使用此代码在我的精灵工具包/ swift游戏中调用另一个类的函数:

class StarNode: GameObjectNode {
    override func collisionWithBall(ball: SKNode) -> Bool {
        endGame()

        return true
    }
}

此功能在另一个类中:

func endGame() {
    gameOver = true
    GameFile.sharedInstance.saveState()

    let reveal = SKTransition.fadeWithDuration(0.5)
    let endGameScene = GameOverScene(size: self.size)
    self.view!.presentScene(endGameScene, transition: reveal)
}

但是当我调用 endGame()时,我收到此消息:在调用中缺少参数#1的参数

我试图让它运作但没有成功。我能做些什么才能让它发挥作用?

2 个答案:

答案 0 :(得分:1)

协议可能是在类之间进行通信的最佳方式,特别是如果您希望保持代码的原样。

在starNode类之上添加协议

protocol StarNodeDelegate: class {
    func endGame()
} 

比向starNode类添加属性

weak var delegate: StarNodeDelegate?

所以现在你的starNode类应该是这样的。

protocol StarNodeDelegate: class {
     func endGame()
} 

class StarNode: GameObjectNode {

weak var delegate: StarNodeDelegate?    


override func collisionWithBall(ball: SKNode) -> Bool {
    delegate?.endGame()

    return true
  }
}

现在在发生碰撞的场景中,gameOver func是我假设你创建了一个starNode实例来访问你所创建的StarNode类。

例如

let starNode = StarNode(...

所以现在你需要让该类确认你创建的协议。

class GameScene: SKScene, StarNodeDelegate {

}

在创建starNode实例后,在ViewDidLoad中添加此代码

starNode.delegate = self // telling the scene to confirm to the protocol

并瞧瞧你的

func endGame() 

将被调用。

答案 1 :(得分:0)

要调用另一个类的方法,首先需要创建该(另一个)类的对象,并使用该对象创建类函数。

像这样,

假设类名为 AnotherClass ,其中包含endGame()函数。

class StarNode: GameObjectNode {
override func collisionWithBall(ball: SKNode) -> Bool {

 let obj = AnotherClass()
 obj.endGame()
  return true
    }
}