func rand(max: Int?) -> Int { var index = Int(arc4random()) return max? != nil ? (index % max!) : index}
我在最后一行得到一个例外:EXC_BAD_INSTRUCTION
我猜这与iPhone 5S是64位同时5不是这样的事实有关,但我在上面的函数中没有看到任何处理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,它在iPhone 5上具有两倍于Int的正范围,因此你的第一个版本基本上有50%的机会在这一行崩溃:
var index = Int(arc4random())
您的修改版本等待转换,直到您使用max的模数和,因此在那里转换为Int是安全的.您应该查看arc4random_uniform,它为您处理模数并避免当前实现中固有的偏差.
总结以上是内存溢出为你收集整理的swift – 为什么以下代码在iPhone 5上崩溃而在iPhone 5S上崩溃?全部内容,希望文章能够帮你解决swift – 为什么以下代码在iPhone 5上崩溃而在iPhone 5S上崩溃?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)