修改答案写范围作为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
}
}
例子:
(0...10).random
(0..<10).random
@TroyT:其实也没有参与这个代码铸造。 OP只是从'Int'值创建一个'UInt32'。 –
@TroyT:看看我的扩展。它确实为'Int'添加了一个初始值设定项,它接收一个范围并在该范围内生成一个“Int”。 –
@appzYourLife我upvoted :)比我的答案更可重用。 – tktsubota