Swift-arc4random()找不到';%的重载';它接受提供的参数
我有一个UISlider来给出搜索半径的范围(对于5-x英里,最大x=100英里),我希望能够得到这个范围内的随机半径距离Swift-arc4random()找不到';%的重载';它接受提供的参数,swift,overloading,sender,arc4random,Swift,Overloading,Sender,Arc4random,我有一个UISlider来给出搜索半径的范围(对于5-x英里,最大x=100英里),我希望能够得到这个范围内的随机半径距离 @IBAction func sliderMoved(sender: UISlider){ //gives a range (minimum range 5 miles, maximum range 5 - 100 miles) var range = (sender.value*95)+5 //gives a random distance in mil
@IBAction func sliderMoved(sender: UISlider){
//gives a range (minimum range 5 miles, maximum range 5 - 100 miles)
var range = (sender.value*95)+5
//gives a random distance in miles from within that range
var distance = Int((arc4random()%(range))+1)
}
当我尝试分配“距离”时,出现错误“找不到接受所提供参数的“%”的重载”。问题是
发送方.value
是一个UISlider.value,它是一个浮点值arc4random
是一个UInt32
,这是您的主要问题
您所做的是,当您只需要首先匹配内部组件时,尝试将整个内容转换为Int
。因此,将范围
和arc4random
设置为相同的类型(我在这里做了一个浮动
),然后进行所需的转换=
Int(Float(arc4random()) % range + 1)
当然,您也可以使用arc4random_uniform
,正如其他评论者在以下内容中所述:
arc4random_uniform(UInt32(range)) + 1
如果您不真正关心范围的值(尤其是小数部分),那么这实际上会更好
使用arc4random\u uniform()
arc4random_uniform()
将无偏差地执行模运算。当然,在浪费堆栈溢出带宽之前,您可以尝试进行一些研究。
let distance = arc4random_uniform(UInt32(range)) - 1