Swift 如何在“中提取价值”;可选(值)";

Swift 如何在“中提取价值”;可选(值)";,swift,command-line,Swift,Command Line,我试图检索可选(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

我试图检索可选(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)
}
}
上面是函数正在访问的类。我知道它可能看起来很凌乱或可怕,但这正是我目前正在处理的问题

我想做的是可能的还是应该尝试不同的方法?任何帮助都将不胜感激

编辑:

现在我在Xcode中遇到以下错误:

“NSObject”不能转换为“UInt8”

这是一个新的等式:

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

当打印出一个可选的,你知道它不是零,你会想把一个!在你想要打印出来的东西之后

println(C!)
它只在打印它或将它插入字符串(如“(optionalString)”时说可选(值),所以您不必“提取”它

一个可选变量基本上是告诉程序这个变量在使用时可以为零


您获得可选项的原因是词典可能不包含您搜索的关键字,在本上下文中,nil可选项表示“不在词典中”。如果您确信XX将始终在MOV中,那么请使用对手.MOV[XX]![1]

注:更改?到(如果XX不在MOV中,那么在运行时会出现致命错误!)。使用!,“砰”的发音是为了警告你——你真的确定这一点吗


注2:如果数组的索引1中没有项,则在运行时也会出现致命错误。

下次请删除所有不必要的代码以提高可读性。请说出这3行中的哪一行是第一行。有cw的一个当用一个可选项计算时,你需要通过做我在回答中所说的同样的事情来告诉它它不是零。因为C是可选的,所以不能确定C是否为零,所以它不会冒险给你一个错误提示。然而,Swift中的错误仍然是非常错误的。很高兴知道!但我想把C放在那个大方程中,所以一个值是40,方程不变。这个值是否仍然适用,或者乘以可选值(40)?好的,完全可以,但我遇到了一个新问题。我现在正在编辑这篇文章。是的,我确信XX将永远在MOV中。MOV将以攻击力和#的使用次数进行4次移动。您的方法也有帮助,但我在上面编辑了一个新错误。您有一个Any数组,您可能希望定义类似struct Action{name:String;value1:Float;value2:Float}的内容。那么MOV是[1:动作(“铲球”,40.0,35),2:动作(“尾鞭”,0.9,35)]我是否仍然将MOV声明为Var?这取决于您是否要修改MOV。是的,接下来我想修改MOV
println(C!)