我正在制作一个应用程序,在该应用程序中,用户将被州政府的测验。首都和州都向用户提供了一个UIImage,我一切正常。为了减少代码,我试图找出如何避免所有这些“ if语句”的方法。下面的“ if语句”仅代表四个州和首都。想象一下这些行四十六次。似乎有点吧?在研究算法时,我遇到了三元运算符,并试图使用它们来减少此代码,但是我没有成功。我有两个UIImage数组-一个保存城市,另一个保存州。我的应用程序识别用户答案是否正确的方式是匹配相应的数组索引。
这是我的缩写数组...
let capitalCityList: [UIImage] = [
UIImage(named: "Montgomery")!,
UIImage(named: "Juneau")!,
UIImage(named: "Phoenix")!,
UIImage(named: "Little Rock")!
let stateWordList: [UIImage] = [
UIImage(named: "Alabama")!,
UIImage(named: "Alaska")!,
UIImage(named: "Arizona")!,
UIImage(named: "Arkansas")!
这是前四个“ if语句” ...
if capitalCity.image == capitalCityList[0] && stateWord.image == stateWordList[0] {
scoreInt += 1
scoreLabel.text = String("Score: \(scoreInt)")
} else if capitalCity.image == capitalCityList[1] && stateWord.image == stateWordList[1] {
scoreInt += 1
scoreLabel.text = String("Score: \(scoreInt)")
} else if capitalCity.image == capitalCityList[2] && stateWord.image == stateWordList[2] {
scoreInt += 1
scoreLabel.text = String("Score: \(scoreInt)")
} else if capitalCity.image == capitalCityList[3] && stateWord.image == stateWordList[3] {
scoreInt += 1
scoreLabel.text = String("Score: \(scoreInt)")
} else if capitalCityWord.image == capitalCityList[4] && stateWord.image == stateWordList[4] {
scoreInt += 1
scoreLabel.text = String("Score: \(scoreInt)")
答案 0 :(得分:1)
您总是在做同样的事情。您增加分数,然后更改标签的文本。因此,只需使用一个if语句即可完成此操作,并且由于UIImage
符合协议Equatable
,因此您可以将元素的索引作为数组中图像的索引来获取,因此不必为每个数组创建手动循环
if let index = capitalCityList.index(of: capitalCity.image),
capitalCity.image == capitalCityList[index]
&& stateWord.image == stateWordList[index] { // these conditions can be written on one line
scoreInt += 1
scoreLabel.text = "Score: \(scoreInt)"
}
无论如何,您可以将[image for state: image for city]
格式的图像放在字典上
let dict = [UIImage(named: "Alabama")!:UIImage(named: "Montgomery")!, ...]
然后您可以比较州图像与首都图像是否相等
if dict[stateWord.image] == capitalCity.image {
scoreInt += 1
scoreLabel.text = "Score: \(scoreInt)"
}