keranm
keranm

Reputation: 363

Swift - generate random Integer between 0.1 and 0.6

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

Answers (1)

keranm
keranm

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

Related Questions