试图理解我得到的这个随机错误 //swift

trying to understand this random error i get //swift

class Personnage {
    var vie = arc4random_uniform(10) + 1;
    var force = arc4random_uniform(8) + 1;
    var chance = arc4random_uniform(2);
    func attaquePar(joueur1:Personnage) ->String {
        var differenceForce = self.force - joueur1.force
        var coup = differenceForce + chance
        if coup >= self.vie {
            return "tu mas eu"
        } else if coup < self.vie {
            self.vie = self.vie - coup
            return "jai rien senti macaque \(self.vie)"
        } else {
            return "heu?"
        }
}
}
let toto = Personnage()
let cafard = Personnage()
toto.attaquePar(cafard)

您好,我在第 6 行收到一条错误消息。它有时有效,有时却无效。这是:执行被中断,原因 EXC_BAD_INSTRUCTION(代码=EXC I386_INVOP 子代码=0x0)。 我想象有一个无效的操作,但我不明白为什么我得到这个。

来自 arc4random_uniform() 的 return 类型是 UInt32,计算 差异

var differenceForce = self.force - joueur1.force

将因运行时异常而中止第二个操作数更大 第一个操作数,即结果不能表示为(无符号)UInt32。不同于其他一些 编程语言,结果不会隐式提升为 Int 或环绕。

一个简单的例子:

let a = UInt32(3)
let b = UInt32(5)
let c = a - b // 

一个可能的解决方案是将所有 数字到 Int,以便可以毫无问题地计算差异:

var vie = Int(arc4random_uniform(10)) + 1
var force = Int(arc4random_uniform(8)) + 1
// etc 

谢谢马丁。你完全正确。

将变量类型从 UInt32 转换为 Int 是解决方案。

var life = arc4random_uniform(10) 
var life = int(arc4random_uniform(10))