如果函数内的陈述不起作用

时间:2016-12-13 18:24:31

标签: ios swift swift3

func endRound() {
    timerLabel.isHidden = true
    var label1Index = allEvents.index(of: label1.text!)
    var label2Index = allEvents.index(of: label2.text!)
    var label3Index = allEvents.index(of: label3.text!)
    var label4Index = allEvents.index(of: label4.text!)
    if (label4Index > label3Index > label2Index > label1Index) {
        score = score + 1
        let successImage = UIImage(named: "next_round_success")! as UIImage
        nextRoundButtonOutlet.setImage(successImage, for: UIControlState.normal)
        nextRoundButtonOutlet.isHidden = false
        round = round + 1
    } else {
        let failImage = UIImage(named: "next_round_fail")! as UIImage
        nextRoundButtonOutlet.setImage(failImage, for: UIControlState.normal)
        nextRoundButtonOutlet.isHidden = false
        round = round + 1
    }
    if (round == 6) {
    }
}

出于某种原因,我收到了:

  

"类型的值' Array.Index?'没有打开;你的意思是使用'!'或' ??'"

第一个if语句旁边的

错误。

当我添加!标记时,正如编译器所建议的那样,在if语句中的每个变量旁边,我收到了:

  

"二元运算符''不能应用于Bool'类型的操作数。和' Array.Index' (又名int)"

  

"相邻运算符属于非关联优先级组' ComparisonPrecedence'"

不确定该怎么做。 if语句中的变量表示标签字符串的索引号(只需阅读代码,您就会明白这一点。)

任何帮助都会得到解决。

2 个答案:

答案 0 :(得分:1)

你有一些问题。对allEvents.index(of: label1.text!)的调用返回可选结果,因为可能无法在数组中找到文本。如果找不到文本,则添加!可能会导致应用崩溃的风险。一种选择是在这种情况下设置一个特殊值,例如-1

var label1Index = allEvents.index(of: label1.text!) ?? -1
var label2Index = allEvents.index(of: label2.text!) ?? -1
var label3Index = allEvents.index(of: label3.text!) ?? -1
var label4Index = allEvents.index(of: label4.text!) ?? -1

现在是if语句。你不能像这样进行一系列>比较。你需要:

if (label4Index > label3Index && label3Index > label2Index && label2Index > label1Index) {
}

答案 1 :(得分:0)

正如rmaddy在他的回答中所说,你收到一条关于索引未被解包的消息,因为字符串index(of:)函数返回一个Optional,如果找不到该字符串,则为nil。

正如rmaddy还指出的那样,确保字符串顺序正确的代码也是无效的。

代码if a > b > c > d无效Swift。您必须将其重写为

if a > b && b > c && c > d

假设找不到任何字符串意味着您想要遵循失败路径,您可以像这样重写代码:

func endRound() {
    var scored = false
    timerLabel.isHidden = true
    if let label1Index = allEvents.index(of: label1.text!), 
      let label2Index = allEvents.index(of: label2.text!),
      let label3Index = allEvents.index(of: label3.text!),
      let label4Index = allEvents.index(of: label4.text!),
      label1Index > label2Index && 
      label2Index > label3Index && 
      label3Index > label4Index {
        score = score + 1
        let successImage = UIImage(named: "next_round_success")! as UIImage
        nextRoundButtonOutlet.setImage(successImage, for: UIControlState.normal)
        nextRoundButtonOutlet.isHidden = false
        round = round + 1
    } else {
        let failImage = UIImage(named: "next_round_fail")! as UIImage
        nextRoundButtonOutlet.setImage(failImage, for: UIControlState.normal)
        nextRoundButtonOutlet.isHidden = false
        round = round + 1
    }
    if (round == 6) {
    }
}

如果找到所有4个字符串并且顺序正确,那么该代码应该会增加分数。如果找不到一个或多个字符串,或者label1 label2 label3 label4 order中没有任何字符串,它将执行else(fail)子句。

认为这就是你所追求的......