如何使用Swift生成范围(10 ... 20)中的随机数

时间:2016-01-11 00:29:26

标签: swift random range

我可以在我的游戏中为我的项目选择一个随机数,但是 是否有可能在两个数字之间选择一个随机数?

所以而不是

let number = (arc4random_uniform(100))

我想要这样的事情:

let number = (arc4random_uniform(10...20))

或类似的东西? 现在,如果我得到武器掉落,它可以是我列表中的所有内容。 通过这种方式,我可以做到这一点,只有前几个对于一个特定的怪物会有一个下降,或者在更高的等级,它们会掉落更好的武器而不再是低等级。

1 个答案:

答案 0 :(得分:9)

Xcode 10•Swift 4.2

extension Range where Bound == Int {
    var random: Int {
        return Int.random(in: self)
    }
    func random(_ n: Int) -> [Int] {
        return (0..<n).map { _ in random }
    }
}
extension ClosedRange where Bound == Int {
    var random: Int {
        return Int.random(in: self)
    }
    func random(_ n: Int) -> [Int] {
        return (0..<n).map { _ in random }
    }
}

Xcode 9•Swift 4

extension Range where Bound == Int {
    var random: Int {
        return lowerBound + numericCast(arc4random_uniform(numericCast(count)))
    }
    func random(_ n: Int) -> [Int] {
        return (0..<n).map { _ in random }
    }
}
extension ClosedRange where Bound == Int {
    var random: Int {
        return lowerBound + numericCast(arc4random_uniform(numericCast(count)))
    }
    func random(_ n: Int) -> [Int] {
        return (0..<n).map { _ in random }
    }
}

Xcode 8.3.2•Swift 3.1

extension Range where Bound: Strideable, Bound == Int {
    var random: Int {
        return lowerBound + Int(arc4random_uniform(UInt32(count)))
    }
    func random(_ n: Int) -> [Int] {
        return (0..<n).map { _ in random }
    }
}
extension ClosedRange where Bound: Strideable, Bound == Int {
    var random: Int {
        return lowerBound + Int(arc4random_uniform(UInt32(count)))
    }
    func random(_ n: Int) -> [Int] {
        return (0..<n).map { _ in random }
    }
}

<强>用法:

(10...20).random    // 16
(0...1).random(10)  // [0, 1, 0, 0, 1, 1, 1, 1, 1, 0]