试图理解我得到的这个随机错误 //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))
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))