用Swift生成随机数

Big*_*Mac 91 arc4random swift

我需要生成一个随机数.

看起来arc4random功能不再存在以及arc4random_uniform功能.

我的选择是arc4random_stir(), arc4random_buf(UnsafeMutablePointer<Void>, Int)arc4random_addrandom(UnsafeMutablePointer<UInt8>, Int32).

我找不到关于函数的任何文档,并且头文件中没有注释给出提示.

Ars*_*sen 224

===== Swift 4.2/Xcode 10 =====

let randomIntFrom0To10 = Int.random(in: 1..<10)
let randomFloat = Float.random(in: 0..<1)

// if you want to get a random element in an array
let greetings = ["hey", "hi", "hello", "hola"]
greetings.randomElement()
Run Code Online (Sandbox Code Playgroud)

Swift用来arc4random_buf完成工作.

===== Swift 4.1/Xcode 9 =====

arc4random()返回04 294 967 295范围内的随机数

drand48()返回0.01.0范围内的随机数

arc4random_uniform(N)返回0N-1范围内的随机数

例子:

arc4random() // => UInt32 = 2739058784
arc4random() // => UInt32 = 2672503239
arc4random() // => UInt32 = 3990537167
arc4random() // => UInt32 = 2516511476
arc4random() // => UInt32 = 3959558840

drand48() // => Double = 0.88642843322303122
drand48() // => Double = 0.015582849408328769
drand48() // => Double = 0.58409022031727176
drand48() // => Double = 0.15936862653180484
drand48() // => Double = 0.38371587480719427

arc4random_uniform(3) // => UInt32 = 0
arc4random_uniform(3) // => UInt32 = 1
arc4random_uniform(3) // => UInt32 = 0
arc4random_uniform(3) // => UInt32 = 1
arc4random_uniform(3) // => UInt32 = 2
Run Code Online (Sandbox Code Playgroud)

建议使用arc4random_uniform(),arc4random() % upper_bound因为当上限不是2的幂时,它避免了"模偏差".


Fer*_*nas 22

你也可以试试:

let diceRoll = Int(arc4random_uniform(UInt32(6)))
Run Code Online (Sandbox Code Playgroud)

我必须添加"UInt32"才能使其正常工作.


PRA*_*EEN 8

只需调用此函数并提供最小和最大数字范围,您将获得一个随机数.

例如randomNumber(MIN:0,MAX:10),你将获得0到9之间的数字.

func randomNumber(MIN: Int, MAX: Int)-> Int{
    return Int(arc4random_uniform(UInt32(MAX-MIN)) + UInt32(MIN));
}
Run Code Online (Sandbox Code Playgroud)

注意: - 您将始终输出一个整数.


Mel*_*ius 5

经过一番调查我写了这个:

import Foundation

struct Math {
   private static var seeded = false

   static func randomFractional() -> CGFloat {

      if !Math.seeded {
         let time = Int(NSDate().timeIntervalSinceReferenceDate)
         srand48(time)
         Math.seeded = true
      }

      return CGFloat(drand48())
   }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以做到Math.randomFraction()随机数[0..1 [无需先记住播种.希望这有助于某人:o)


Que*_*n N 5

使用 swift 4.2 更新:

let randomInt = Int.random(in: 1..<5)
let randomFloat = Float.random(in: 1..<10)
let randomDouble = Double.random(in: 1...100)
let randomCGFloat = CGFloat.random(in: 1...1000)
Run Code Online (Sandbox Code Playgroud)