计时器给我随机数作为回报

时间:2017-03-23 18:05:25

标签: ios swift nstimer

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)

当我具体说出随机数时,这怎么可能呢?我看到插入的任何数字都会返回这个随机数字。怎么样?

2 个答案:

答案 0 :(得分:3)

你这样做是错的。 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)

答案 1 :(得分:2)

@ rmaddy的答案是正确的,但如果你的部署目标是iOS 10.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
}