我正在尝试检索一个在Optional(N)中的值,其中" N"是价值。我是Swift的新手,所以我不确定我的语法是否合适,或者是否建议我编写这样的代码,但是我拥有的是:
func dmg_Calc() {
if player.SPD < opponent.SPD {
var XX = rndm(2, 3)
var A = opponent.Lvl
var B = opponent.ATT
var C = opponent.MOV[XX]?[1]
var D = player.ATT
var X = 1.0
var Y = 1.0
var Z = rndm_DBL(217.0, 255.0)
// Opponent Attacks
var DMG = ((2.0*A/5.0+2.0)*B)
DMG = (DMG/D/50.0)+2.0
DMG = DMG*(X*Y/10.0)*Z/255.0
player.HP = (player.HP - DMG)
println(C)
println(DMG)
println("HP Left \(player.HP)")
println(XX)
}
}
我正在使用它作为损伤计算,我可以看到。我的问题是当你到达Var C.那条线给了我一个可选(N)。它基本上是将dict路由到具有所需值的数组。
class Eevee {
var Lvl = 5.0
var HP = 20.0
var ATT = 55.0
var DEF = 15.0
var SPD = 16.0
var SPC = 15.0
var isPoisoned = false
var isParalyzed = false
var isAsleep = false
var MOV = [1 : ["Tackle", 40.0, 35], 2 : ["Tail Whip", 0.9, 35]]
以上是该功能正在访问的类。我知道它可能看起来很乱或很糟糕,但它正是我现在正在处理的事情。
我想要做什么或者我应该尝试不同的方法?任何帮助将不胜感激!!!
编辑:
现在我在Xcode中收到以下错误:
&#39; NSObject的&#39;不能转换为&#39; UInt8&#39;
这是新的等式:
var DMG = ((2.0*A/5.0+2.0)*B*C)
DMG = (DMG/D/50.0)+2.0
DMG = DMG*(X*Y/10.0)*Z/255.0
答案 0 :(得分:0)
当打印出一个可选项并且你知道它不是零时你会想要一个!在你打算打印出来之后
println(C!)
在打印时或将其插入类似&#34;(optionalString)&#34;的字符串时,它只会说可选(值);所以你不必提取&#34;提取&#34;它
可选变量基本上告诉程序使用时该变量可以是nil。
答案 1 :(得分:0)
你有一个可选的原因是因为字典可能不包含你搜索的密钥,在这个上下文中的nil可选意味着“不在字典中”。如果你确信XX总是在MOV中,那就使用opponent.MOV [XX]![1]。
注意:改变?至 ! (如果XX不在MOV中,那么在运行时会出现致命错误!)。使用!,发音为bang,意在警告你 - 你真的对此有把握吗?
注意2:如果数组在索引1处没有项目,那么在运行时也会出现致命错误。