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

Posted

技术标签:

【中文标题】试图理解这个随机错误我得到 //swift【英文标题】:trying to understand this random error i get //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 是否符合您的预期? 感谢您抽空吉姆。我在下面得到了答案。 【参考方案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)) ?

【讨论】:

不客气,很高兴为您提供帮助。 – 但请注意,确认解决方案的首选方法是接受答案(通过单击复选标记)。请参阅***.com/help/someone-answers 了解更多信息

以上是关于试图理解这个随机错误我得到 //swift的主要内容,如果未能解决你的问题,请参考以下文章

我从核心数据填充 PickerView 并得到错误 Index Out Of Range Swift 5

Swift 从 Firebase ServerValue.timestamp() 得到错误的日期

生成 rpc 文件并尝试编译它后,我得到一个冲突错误

从关键字定义,但我仍然得到错误

试图找到一个区域名称的名称 - 得到错误13类型不匹配

得到随机布尔值