The system’s default source of random data.


When you generate random values, shuffle a collection, or perform another operation that depends on random data, this type is the generator used by default. For example, the two method calls in this example are equivalent:

let x = Int.random(in: 1...100)
var g = SystemRandomNumberGenerator()
let y = Int.random(in: 1...100, using: &g)

SystemRandomNumberGenerator is automatically seeded, is safe to use in multiple threads, and uses a cryptographically secure algorithm whenever possible.

Platform Implementation of SystemRandomNumberGenerator

While the system generator is automatically seeded and thread-safe on every platform, the cryptographic quality of the stream of random data produced by the generator may vary. For more detail, see the documentation for the APIs used by each platform.

  • Apple platforms use arc4random_buf(3).

  • Linux platforms use getrandom(2) when available; otherwise, they read from /dev/urandom.



Instance Methods

func next<T>() -> T

Returns a value from a uniform, independent distribution of binary data.

func next() -> UInt64

Returns a value from a uniform, independent distribution of binary data.

func next<T>(upperBound: T) -> T

Returns a random value that is less than the given upper bound.


See Also

Random Number Generators

protocol RandomNumberGenerator

A type that provides uniformly distributed random data.


Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software