Swift随机数问题

时间:2014-08-06 18:32:50

标签: xcode random swift arc4random

我正在使用Swift和Xcode 6 Beta 5,并试图在我的特定约束之间生成一个随机数。

目前我正在使用arc4random_uniform()函数,该函数适用于简单生成,如:

arc4random_uniform(5)

但我试图创建一个带有复杂边界的随机数。这是我的尝试:

randomMovement = Int( arc4random_uniform( (0.25 * Int(cs)) - ( 0.175 * rd ) ) ) + Int( 0.175 * rd )

cs和rd都是整数 - 最初,cs = 100,rd = 40.这应该生成7到25之间的随机数。但是,由于变量类型,我在Xcode中遇到了很多问题。

使用此代码,它最初显示一个错误 - 在第一个'*'上,它表示:

'Int' is not convertible to 'UInt8'

但是当我改变它时,它会出现更多问题,而且似乎我会继续围成一圈。

出了什么问题,我该如何解决这个问题?

4 个答案:

答案 0 :(得分:5)

遇到类型问题时,请逐步构建表达式。

import Darwin

let cs = 100
let rd = 40

let min = UInt32(0.175 * Float(rd))
let max = UInt32(0.25 * Float(cs))

// This isn't really necessary, the next line will crash if it's not true, but
// just calling out this implicit assumption
assert(max >= min)

let randomMovement = Int(arc4random_uniform(max - min) + min)

arc4random_uniform需要UInt32,所以你需要到达那里。如果没有类型转换,则无法将FloatInt相乘,因此您需要添加这些内容。

当我说“逐步建立”时,我的意思是你,而不是编译器。编译器可以处理:

let randomMovement = Int(arc4random_uniform(UInt32(0.25 * Float(cs)) - UInt32(0.175 * Float(rd))) + UInt32(0.25 * Float(cs)))

但有点难以理解(可能会计算两次cs / 4)。

答案 1 :(得分:3)

你可以在swift中使用内置的random()函数:

let randomInt = random() % 5

答案 2 :(得分:1)

in Swift 4.2 you can make something like:

let number = Int.random(in: 0 ..< 10)

答案 3 :(得分:0)

使用 Swift 4.2 ,您现在可以直接从Int.random拨打电话。您可以查看更多详细信息here