【问题标题】:trying to understand this random error i get //swift试图理解这个随机错误我得到 //swift
【发布时间】:2018-01-09 14:23:49
【问题描述】:
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 (code=EXC I386_INVOP subcode=0x0)。 我想有一个无效的操作,但我不明白为什么我得到这个。

【问题讨论】:

  • 我假设这是在线var differenceForce = self.force - joueur1.force?您能否在调试器中检查 self.forcejoueur1.force 是否符合您的预期?
  • 感谢您抽空吉姆。我在下面得到了答案。

标签: swift exc-bad-instruction


【解决方案1】:

arc4random_uniform() 的返回类型是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 

【讨论】:

    【解决方案2】:

    谢谢马丁。你完全正确。

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

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

    【讨论】:

    • 不客气,很高兴为您提供帮助。 – 但请注意,确认解决方案的首选方法是接受答案(通过单击复选标记)。请参阅stackoverflow.com/help/someone-answers 了解更多信息
    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2020-02-19
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多