Reputation: 363
I'm having trouble with Swift trying to generate a random number between 0.1 and 0.6
I want to introduce a micro delay into a simple game to make it look like the iPhone is having to "think" before responding.
I have found various snippets to generate a random number (none that show how to do decimal numbers).
I've found a snippet that does the delay (and if I hard code the number it works)
I was trying this code for a start to generate a random number, divide it by 10 to turn 6 into 0.6 ..
// delay before playing
let lower : UInt32 = 1
let upper : UInt32 = 6
let delayTime = arc4random_uniform(upper - lower) + lower
delayTime = delayTime / 10
let delay = delayTime * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue()) {
self.aiTurn()
}
Xcode tells me that the line
delayTime = delayTime / 10
Cannot assign to 'let' value 'delayTime' - so obviously I can't just divide the value of delayTime by 10
Xcode also tells me that the line
let delay = delayTime * Double(NSEC_PER_SEC)
Binary operator * cannot be applied to operands of type 'UInt32' and 'Double'
I know I'm mixing Int, UInt32, Int64 and Doubles - but I've no idea how to steer myself out of this - any help much appreciated
Thanks
Upvotes: 0
Views: 606
Reputation: 363
Okay here is the working code - thanks to @mireke for help
// delay before playing
var lower : UInt32 = 1
var upper : UInt32 = 6
var delayTime = arc4random_uniform(upper - lower) + lower
var delayTimer = Double(delayTime) / 10
var delay = delayTimer * Double(NSEC_PER_SEC)
var time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue()) {
self.aiTurn()
}
Upvotes: 0