Starting with XCode 7 / Swift 2, I am seeing an intermittent EXC_ARM_BREAKPOINT, subcode=0xe7ffdefe crash in this code:
let rando = Int(arc4random())Any ideas?
(Edited to remove the threadsafety question)
You are essentially doing this (which will also overflow the signed int with the unsigned int value):
func foo() -> UInt32 {
return UInt32(Int32.max) + 1
}
// foo will return a value that is 1 above what a signed 32 bit integer can hold (2147483647 + 1).
// So if you change " + 1" to " + 0", it will not crash.
let bar = Int32(foo()) // <-- Will crash the same way.
print(bar)I guess you have to think about within what range you want your random values.
Since the function arc4random() returns an UInt32 within the closed range [0, UInt32.max], you'll have to turn those values into the type and range that you want.
For example if you would want a double value in the half open range [0.0, 1.0) you could do something like:
func rndDoubleHalfOpenZeroToOne() -> Double {
return (Double(arc4random()) + 0.5) / (Double(UInt32.max) + 1.0)
}And if what you want really is a random signed Int32 within the closed range [Int32.min, Int32.max], then I suppose you could do:
func rndInt32() -> Int32 {
return Int32(bitPattern: arc4random())
}