试图理解这个随机错误我得到 //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.force
和 joueur1.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