在Swift中创建随机Bool

时间:2015-12-12 14:26:03

标签: swift random swift2 boolean

我需要在Swift中为我的游戏创建一个随机的bool值。

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

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

let randomSequenceNumber = Int(arc4random_uniform(2))

现在它有效,但似乎偏向0对我来说......就像荒谬的偏见......

这就是我当时使用的值:

if(randomSequenceNumber == 0)
    //spawn object A
else
    //spawn object B

使用随机bool值有更好的方法来实现吗?那不是偏向某个值吗?

更新

在10,000次通话中生成了一些实验,以查看10的对等数量:{/ p>

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

3 个答案:

答案 0 :(得分:48)

import Foundation

func randomBool() -> Bool {
    return arc4random_uniform(2) == 0
}

for i in 0...10 {
    print(randomBool())
}

对于更高级的生成器,该理论可用here

基本了解伯努利(或二项式)分布检查here

答案 1 :(得分:19)

带有Swift 4.2的Xcode 10

看起来像Apple的工程师在听

let randomBool = Bool.random()

答案 2 :(得分:16)

extension Bool {
    static func random() -> Bool {
        return arc4random_uniform(2) == 0
    }
}

// usage:
Bool.random()