Swift Linux生成随机布尔

Swift Linux生成随机布尔,linux,swift,server-side-swift,Linux,Swift,Server Side Swift,我试图对Bool进行静态扩展,以便在调用时返回一个随机的真/假值。我正在努力使这项工作: static func coinFlip() -> Bool { #if os(Linux) srand(UInt32(time(nil))) let result = Int(random() % 2) if result == 0 { return false } else { return true } #e

我试图对
Bool
进行静态扩展,以便在调用时返回一个随机的真/假值。我正在努力使这项工作:

static func coinFlip() -> Bool {
    #if os(Linux)
    srand(UInt32(time(nil)))
    let result = Int(random() % 2)
    if result == 0 {
        return false
    } else {
        return true
    }
    #else
    return arc4random_uniform(2) == 0
    #endif
}
我在服务器端Swift应用程序中调用的路由范围内使用它。无论何时第一次调用它,它都会返回一个随机值,但是对同一范围内的函数的所有后续调用都不会随机化输出。例如:

for _ in 1...5 {
    let coin = Bool.coinFlip()
    if coin == true {
        print("coin flip true")
    } else {
        print("coin flip false")
    }
}
…产生以下内容的输出:

coin flip false
coin flip false
coin flip false
coin flip false
coin flip false
…但如果我再次单独呼叫路线,我可以得到:

coin flip true
coin flip true
coin flip true
coin flip true
coin flip true
srand(UInt32(time(nil))
仅将
random()的伪随机序列随机化是否有问题?我不知道该怎么办。提前感谢您的帮助

time(nil))
以秒为单位返回当前时间,这意味着 在以下情况下,使用相同的值为随机数生成器设定种子: 在一秒钟的时间间隔内多次调用该方法

您应该在应用程序中只调用一次
srand(UInt32(time(nil))
启动,而不是每次调用
coinFlip()

另外,函数可以简化一点,我会调用 它是
random()
,而不是
coinFlip()


从Swift 4.2开始,有一种本地方法可以做到这一点:

let flippedCoin = Bool.random()
文件:

let flippedCoin = Bool.random()