微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

参见英文答案 > How does one generate a random number in Apple’s Swift language?                                    25个
我可以在我的游戏中为我的项目选择一个随机数,但是
是否有可能在2个数字之间选择一个随机数?

而不是

let number = (arc4random_uniform(100))

我想要这样的东西:

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

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

解决方法

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]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐