Utilisation arc4random_uniform()
Usage:
arc4random_uniform(someNumber: UInt32) -> UInt32
Cela vous donne des entiers aléatoires dans la plage 0
de someNumber - 1
.
La valeur maximale pour UInt32
est de 4 294 967 295 (c'est-à-dire 2^32 - 1
).
Exemples:
Tirage au sort
let flip = arc4random_uniform(2) // 0 or 1
Lancer de dés
let roll = arc4random_uniform(6) + 1 // 1...6
Jour aléatoire en octobre
let day = arc4random_uniform(31) + 1 // 1...31
Année aléatoire dans les années 1990
let year = 1990 + arc4random_uniform(10)
Forme générale:
let number = min + arc4random_uniform(max - min + 1)
où number
, max
et min
sont UInt32
.
Qu'en est-il de...
arc4random ()
Vous pouvez également obtenir un nombre aléatoire en utilisant arc4random()
, ce qui produit UInt32
entre 0 et 2 ^ 32-1. Ainsi, pour obtenir un nombre aléatoire entre 0
et x-1
, vous pouvez le diviser par x
et prendre le reste. Ou en d'autres termes, utilisez l' opérateur restant (%) :
let number = arc4random() % 5 // 0...4
Cependant, cela produit un léger biais modulo (voir aussi ici et ici ), c'est pourquoi arc4random_uniform()
est recommandé.
Conversion vers et depuis Int
Normalement, ce serait bien de faire quelque chose comme ça afin de faire des allers-retours entre Int
et UInt32
:
let number: Int = 10
let random = Int(arc4random_uniform(UInt32(number)))
Le problème, cependant, est qu'il Int
a une gamme de -2,147,483,648...2,147,483,647
systèmes 32 bits et une gamme de -9,223,372,036,854,775,808...9,223,372,036,854,775,807
systèmes 64 bits. Comparez cela à la UInt32
gamme de 0...4,294,967,295
. Le U
de UInt32
signifie non signé .
Considérez les erreurs suivantes:
UInt32(-1) // negative numbers cause integer overflow error
UInt32(4294967296) // numbers greater than 4,294,967,295 cause integer overflow error
Il vous suffit donc de vous assurer que vos paramètres d'entrée se situent dans la UInt32
plage et que vous n'avez pas besoin non plus d'une sortie en dehors de cette plage.