如何在“可选(值)”中提取值

时间:2015-03-24 23:11:51

标签: swift command-line

我正在尝试检索一个在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

2 个答案:

答案 0 :(得分:0)

当打印出一个可选项并且你知道它不是零时你会想要一个!在你打算打印出来之后

println(C!)

在打印时或将其插入类似&#34;(optionalString)&#34;的字符串时,它只会说可选(值);所以你不必提取&#34;提取&#34;它

可选变量基本上告诉程序使用时该变量可以是nil。

Please read Swift basics

答案 1 :(得分:0)

你有一个可选的原因是因为字典可能不包含你搜索的密钥,在这个上下文中的nil可选意味着“不在字典中”。如果你确信XX总是在MOV中,那就使用opponent.MOV [XX]![1]。

注意:改变?至 ! (如果XX不在MOV中,那么在运行时会出现致命错误!)。使用!,发音为bang,意在警告你 - 你真的对此有把握吗?

注意2:如果数组在索引1处没有项目,那么在运行时也会出现致命错误。