gpt4 book ai didi

swift - 为什么以下代码在 iPhone 5 而不是 iPhone 5S 上崩溃?

转载 作者:IT王子 更新时间:2023-10-29 05:46:56 25 4
gpt4 key购买 nike

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位整数,在iPhone 5S上是64位整数。由于 arc4random() 返回一个 UInt32,它的正范围是 iPhone 5 上 Int 的两倍,您的第一个版本基本上有 50这条线上崩溃的可能性百分比:

var index = Int(arc4random())

您修改后的版本会等待转换,直到您对 max 取模和,因此在那里转换为 Int 是安全的。你应该看看 arc4random_uniform ,它会为您处理模数并避免您当前实现中固有的一些偏差。

关于swift - 为什么以下代码在 iPhone 5 而不是 iPhone 5S 上崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25274265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com