Swift Linux 生成随机布尔值
Swift Linux Generate Random Bool
我正在尝试将 Bool
静态扩展到 return 随机 true/false 值,无论何时调用。我正在努力使这项工作:
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 应用程序调用的路由范围内使用它。每当它第一次被调用时,它都会 return 一个随机值,但在同一范围内对该函数的所有后续调用都不会随机化输出。例如:
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))
returns 当前时间为 秒数, 表示
您使用 相同的值 为随机数生成器播种
该方法在一秒间隔内被多次调用。
您应该在申请时只致电 srand(UInt32(time(nil)))
一次
启动,而不是每次调用 coinFlip()
.
另外,函数可以简化一点,我会调用
它 random()
,而不是 coinFlip()
:
#if os(Linux)
srand(UInt32(time(nil)))
#endif
extension Bool {
static func random() -> Bool {
#if os(Linux)
return Glibc.random() % 2 == 0
#else
return arc4random_uniform(2) == 0
#endif
}
}
for _ in 1...5 {
print(Bool.random())
}
从 Swift 4.2 开始,有一种本机方法可以执行此操作:
let flippedCoin = Bool.random()
文档:https://developer.apple.com/documentation/swift/bool/2994861-random
我正在尝试将 Bool
静态扩展到 return 随机 true/false 值,无论何时调用。我正在努力使这项工作:
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 应用程序调用的路由范围内使用它。每当它第一次被调用时,它都会 return 一个随机值,但在同一范围内对该函数的所有后续调用都不会随机化输出。例如:
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))
returns 当前时间为 秒数, 表示
您使用 相同的值 为随机数生成器播种
该方法在一秒间隔内被多次调用。
您应该在申请时只致电 srand(UInt32(time(nil)))
一次
启动,而不是每次调用 coinFlip()
.
另外,函数可以简化一点,我会调用
它 random()
,而不是 coinFlip()
:
#if os(Linux)
srand(UInt32(time(nil)))
#endif
extension Bool {
static func random() -> Bool {
#if os(Linux)
return Glibc.random() % 2 == 0
#else
return arc4random_uniform(2) == 0
#endif
}
}
for _ in 1...5 {
print(Bool.random())
}
从 Swift 4.2 开始,有一种本机方法可以执行此操作:
let flippedCoin = Bool.random()
文档:https://developer.apple.com/documentation/swift/bool/2994861-random