首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对arc4random()施加限制?

对arc4random()施加限制?
EN

Stack Overflow用户
提问于 2014-06-15 13:11:41
回答 2查看 243关注 0票数 2

Swift中,我使用arc4random生成介于0到568之间的数字。

不过,我需要它对此加以限制。例如,这个数字不能介于10到40之间。这些“限制”是如何增加的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-15 13:28:28

继续努力直到条件满足为止:

代码语言:javascript
复制
func funnyRandom() -> UInt32 {
    var ran: UInt32 = 0
    do {
        ran = arc4random_uniform(568)
    } while (ran > 10 && ran < 40)
    return ran;
}

在目标C中,它与Swift中的方法相同:

代码语言:javascript
复制
- (int)funnyRandom {
    int ran;
    do {
        ran = arc4random_uniform(568);
    } while (ran > 10 && ran < 40);
    return ran;
}
票数 4
EN

Stack Overflow用户

发布于 2014-06-15 13:46:00

而不多次调用arc4random_uniform

代码语言:javascript
复制
func funnyRandom() -> UInt32 {
    var ran: UInt32 = 0

    //we have less values
    ran = arc4random_uniform(568 - 40 + 10)

    //skip the excluded range
    if (ran > 10) {
       ran += 40 - 10
    }
}

更笼统地说:

代码语言:javascript
复制
func funnyRandom(max: UInt32, excludeRange: Range<UInt32>) -> UInt32 {
    var excludeRangeLength = excludeRange.endIndex - excludeRange.startIndex + 1

    var random: UInt32 =  arc4random_uniform(max - excludeRangeLength)

    if (random >= excludeRange.startIndex) {
        random += excludeRangeLength
    }

    return random
}

funnyRandom(568, excludeRange: 10...40)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24229925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档