计时器在 return 中给我随机数

Timer is giving me random numbers in return

func executeSpawningStar(startPosition: CGPoint) {
        print(startPosition)
}

此函数由以下行执行:

  gameTimer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(executeSpawningStar), userInfo: (startPosition: 0, 0), repeats: true)

这是印刷品:

(1421871380267.49, 9.22337203685478e+18)
(1421902263851.49, 9.22337203685478e+18)
(1421902263851.49, 9.22337203685478e+18)

当我具体说任何随机数时,这怎么可能呢?我看到任何数字插入 returns 这个非常随机的数字。怎么会?

你这样做全错了。 executeSpawningStart 函数的参数必须是计时器。不可能是别的。然后你从定时器的 userInfo 属性.

得到起始位置

所以你需要:

func executeSpawningStar(_ timer: Timer) {
    if let startPosition = timer.userInfo as? CGPoint {
        print(startPosition)
    }
}

这假设您在创建计时器时设置的 userInfo 实际上是一个 CGPoint(我基于您原来的 executeSpawningStar 方法。

但是在调用 scheduledTimer... 时,您实际上并未将 CGPoint 传递给 userInfo 参数。它似乎是某种元组。您可能想传递 CGPoint(x: 0, y: 0) 而不是 (startPosition: 0, 0).

@rmaddy的回答是正确的,但是如果你的部署目标是iOS10.0+(或者macOS 10.12+或者tvOS 10.0+或者watchOS 3.0+),你可以使用scheduledTimer的版本它采用块而不是选择器,并且完全避免使用 userInfo 。示例:

var point = CGPoint(x: 0, y: 0)
gameTimer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { (timer) in
    print(point)
    point.x += 1
}