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()