Swift-arc4random()找不到';%的重载';它接受提供的参数

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

我有一个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 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