Luca's modified answer written as an extension in Swift 4
/// Returns random number within given range, upper bound included, eg. -1...0 = [-1, 0, 1] extension CountableClosedRange where Bound == Int { var random: Int { let range = self let offset: Int = range.lowerBound < 0 ? abs(range.lowerBound) : 0 let min = UInt32(range.lowerBound + offset) let max = UInt32(range.upperBound + offset) let randomNumber = Int(min + arc4random_uniform(max - min + 1)) - offset return randomNumber } } /// Returns random number within given range, upper bound not included, eg. -1...0 = [-1, 0] extension CountableRange where Bound == Int { var random: Int { let range = self let offset: Int = range.lowerBound < 0 ? abs(range.lowerBound) : 0 let min = UInt32(range.lowerBound + offset) let max = UInt32(range.upperBound + offset) let randomNumber = Int(min + arc4random_uniform(max - min)) - offset return randomNumber } }
Examples:
(0...10).random (0..<10).random
source share