我需要生成一个随机数.
看起来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()
返回0到4 294 967 295范围内的随机数
drand48()
返回0.0到1.0范围内的随机数
arc4random_uniform(N)
返回0到N-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"才能使其正常工作.
只需调用此函数并提供最小和最大数字范围,您将获得一个随机数.
例如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)
注意: - 您将始终输出一个整数.
经过一番调查我写了这个:
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)
使用 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)
归档时间: |
|
查看次数: |
115559 次 |
最近记录: |