我正在使用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'
但是当我改变它时,它会出现更多问题,而且似乎我会继续围成一圈。
出了什么问题,我该如何解决这个问题?
答案 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
,所以你需要到达那里。如果没有类型转换,则无法将Float
和Int
相乘,因此您需要添加这些内容。
当我说“逐步建立”时,我的意思是你,而不是编译器。编译器可以处理:
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。