Utilisation arc4random_uniform()
Usage:
arc4random_uniform(someNumber: UInt32) -> UInt32
Cela vous donne des entiers aléatoires dans la plage 0de someNumber - 1.
La valeur maximale pour UInt32est 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, maxet minsont UInt32.
Qu'en est-il de...
arc4random ()
Vous pouvez également obtenir un nombre aléatoire en utilisant arc4random(), ce qui produit UInt32entre 0 et 2 ^ 32-1. Ainsi, pour obtenir un nombre aléatoire entre 0et x-1, vous pouvez le diviser par xet 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 Intet UInt32:
let number: Int = 10
let random = Int(arc4random_uniform(UInt32(number)))
Le problème, cependant, est qu'il Inta une gamme de -2,147,483,648...2,147,483,647systèmes 32 bits et une gamme de -9,223,372,036,854,775,808...9,223,372,036,854,775,807systèmes 64 bits. Comparez cela à la UInt32gamme de 0...4,294,967,295. Le Ude UInt32signifie 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 UInt32plage et que vous n'avez pas besoin non plus d'une sortie en dehors de cette plage.