func rand(max: Int?) -> Int {
var index = Int(arc4random())
return max? != nil ? (index % max!) : index
}
我在最后一行遇到异常: EXC_BAD_INSTRUCTION
我猜测这与以下事实有关:iPhone 5S是64位而iPhone 5S不是64位,但是我看不到上面处理64位的函数中的任何内容吗?
通过以下调整,我可以解决此问题,但是我仍然无法解释原因。
func rand(max: Int?) -> Int {
var index = arc4random()
return max? != nil ? Int(index % UInt32(max!)) : Int(index)
}
的Int
整数类型是在iPhone 5 32位整数,在一个5S 64位整数。由于arc4random()
返回的UInt32
值是Int
iPhone 5的正范围的两倍,因此您的第一个版本基本上有50%的机率在此行崩溃:
var index = Int(arc4random())
修改后的版本将等待转换,直到您使用取模和为止max
,因此可以安全地转换到Int
那里。您应该签出arc4random_uniform,它为您处理模数,并避免当前实现中固有的偏差。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句