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)。 我想有一个无效的操作,但我并不喜欢为什么我得到这个。
答案 0 :(得分: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
答案 1 :(得分:0)
谢谢马丁。你是完全正确的。
将变量类型从UInt32转换为Int是解决方案。
var life = arc4random_uniform(10)
var life = int(arc4random_uniform(10))