有没有办法为 Swift 4.2 随机数生成器提供种子

use*_*411 5 random ios random-seed swift swift4.2

我喜欢新的 Swift 4.2 RandomNumberGenerator 东西,但我看不到那里有种子的可能性。我是否遗漏了什么,或者有什么办法可以通过调用底层的低级函数来为这些生成器提供种子?我有很多代码,它们在默认数字类型上使用默认数字生成器,现在我需要确保在启动之间一切行为完全相同,而代码更改尽可能少。

pjs*_*pjs 6

如果您希望通过显式播种GameplayKit实现可重复性,您可以使用Mersenne Twister的实现:

import Cocoa
import GameplayKit

let mt = GKMersenneTwisterRandomSource.init(seed: 12345)

for _ in (1...5) {
  print(mt.nextUniform())
}
Run Code Online (Sandbox Code Playgroud)


mat*_*att 4

新架构的整体思想是任何生成器都可以通过采用 RandomNumberGenerator 协议来替代。因此,如果您需要可重复的种子,请使用您自己的随机生成器算法。