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
语句中的变量表示标签字符串的索引号(只需阅读代码,您就会明白这一点。)
任何帮助都会得到解决。
答案 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)子句。
我认为这就是你所追求的......