无法识别的选择器通过Timer发送到实例

Rud*_*iel 3 sprite-kit swift

我正在使用spritekit进行游戏,并希望每秒检查变量的一些更新(而不是使用经常检查的更新方法).我创建了一个scheduledTimer,它有一个我想要运行的函数的选择器,但它给了我错误:发送到实例的无法识别的选择器.

我知道这个函数可能需要正确的发送者,但它是什么?谢谢

var timer = Timer.scheduledTimer(timeInterval: 1, 
                                       target: self,
                                     selector: #selector(GameScene.updateEachSecond), 
                                     userInfo: nil,
                                      repeats: true)

func updateEachSecond() {
   print("1 second has passed")
}
Run Code Online (Sandbox Code Playgroud)

Leo*_*bus 6

你需要声明你的计时器

var timer = Timer()
Run Code Online (Sandbox Code Playgroud)

作为GameScene的财产

并将您的计时器初始化移动到didMove(to:或在场景加载完成后运行的任何其他方法).

override func didMove(to view: SKView) {
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateEachSecond), userInfo: nil, repeats: true)
}
Run Code Online (Sandbox Code Playgroud)

注释中建议的另一个选项是检查更新方法,如果第二个更改:

var timeInterval: TimeInterval = 0
var time = 0

override func update(_ currentTime: TimeInterval) {
    if timeInterval < currentTime.rounded(.down) {
        time += 1
        timeInterval = currentTime
        updateEachSecond()
    }
}

func updateEachSecond() {
    print("Time:", time, terminator: "s\n")
}
Run Code Online (Sandbox Code Playgroud)