在Swift中创建随机布尔

在Swift中创建随机布尔,swift,random,swift2,boolean,Swift,Random,Swift2,Boolean,我需要在我的游戏中创建一个随机布尔值,用Swift 基本上,如果是(或1),生成一个对象,如果不是(或0),生成另一个对象 到目前为止,我在这里看到了一个类似的例子,我发现: let randomSequenceNumber = Int(arc4random_uniform(2)) 现在它起作用了,但对我来说似乎偏向于0。。。就像荒谬的偏见 这就是我使用该值的方式: if(randomSequenceNumber == 0) //spawn object A else //sp

我需要在我的游戏中创建一个随机布尔值,用Swift

基本上,如果是(或1),生成一个对象,如果不是(或0),生成另一个对象

到目前为止,我在这里看到了一个类似的例子,我发现:

let randomSequenceNumber = Int(arc4random_uniform(2))
现在它起作用了,但对我来说似乎偏向于0。。。就像荒谬的偏见

这就是我使用该值的方式:

if(randomSequenceNumber == 0)
    //spawn object A
else
    //spawn object B
有没有更好的方法使用随机布尔值来实现这一点?这不是对某个值的偏见吗

更新

这是一个实验,看看在10000次调用中生成了多少个
1
0

func experiment() {
    var numbers: [Int] = []
    var tester: Int = 0
    var sum = 0

    for i in 0...10000 {
        tester = Int(arc4random_uniform(2))
        numbers.append(tester)
        print(i)
    }

    for number in numbers {
        sum += number
    }

    print("Total 1's: ", sum)
}

Test 1: Console Output: Total 1's: 4936
Test 2: Console Output: Total 1's: 4994
Test 3: Console Output: Total 1's: 4995
对于更先进的发电机,理论是可用的

对于伯努利(或二项式)分布的基本理解,请使用Swift 4.2检查代码10 看起来像苹果 工程师们正在倾听

let randomBool = Bool.random()

我试着在操场上使用这个函数,计算10000次呼叫的0和1结果的数量。我绝对看不出你所经历的偏见。(更像是两个方向的+/-1.2%)你的应用程序中有没有其他可能影响结果的条件?真的吗?也许只是看起来有偏见。。。如果你知道我的意思,也许它不够随机(或分布不够均匀):(试一试!看看你在你的环境中是否得到了同样的结果。你期望得到什么?假设你有一个函数,它可以给你序列真、假、真、假……真、假将“完美”分布,但不幸的是不是随机分布的!!你的测试没有价值可言,arc4random_uniform是否真的适合你的应用程序应用程序。通常有很多标准,其中一些标准可能非常特定于需要解决的问题。我试图向您解释,即使您运行了10000次,也不能期望您将收到5000个true和5000个false。您想要的是在每次调用函数时都有50%的概率。这是更好的代码当然,所以我将我的更改为
let randomSequenceNumber=Int(arc4random_uniform(2))==0?对:错
由你决定,创建一个Int根本没有必要…这个分布对于几乎所有的应用程序来说都足够好。如果你仍然不满意,请检查我提供给你的链接中的理论哦,我在哪里读到过,转换为Int以消除绝对偏差是一个很好的实践。无论哪种方式,绝对是更好的方式。我会我确实检查了那份文件。谢谢你的发帖。for语句中的随机结果不是随机的,而是时间/微秒。
extension Bool {
    static func random() -> Bool {
        return arc4random_uniform(2) == 0
    }
}

// usage:
Bool.random()
let randomBool = Bool.random()