我有一个项目,其中显示了一些UIbuttons
,其中显示了不同的UIimages
。通过用户互动,UIimages
中可能存在任何UIButtons
。项目中大约有1000个图像。我初始化了一个名为' i'的变量。所有按钮上都有IBAction
名为buttonTapped。现在我想更新变量' i'并使用' i'的值为每一个可能的'UIImage'。我可以使用IF语句执行此操作,如下所示:
@IBAction func buttonTapped(sender: UIButton) {
if sender.currentImage == UIImage(named: "image1") {
i = 1
print(i)
// use the value of i
} else if sender.currentImage == UIImage(named: "image2") {
i = 2
print(i)
// use the value of i
} else if sender.currentImage == UIImage(named: "image3") {
i = 3
print(i)
// use the value of i
} else if // and so on
但我想要一个更好的解决方案然后是一个IF语句,其中大约有1000个if(s)。我试过了,但我无法用简洁的方式重写代码。我可以使用什么代替IF语句?某种循环?
答案 0 :(得分:1)
原油解决方案(假设指数都是连续的)将是
for i in 1 ... 1000 { // or whatever the total is
if sender.currentImage == UIImage(named: "image\(i)") {
print(i)
// use i
}
}
一个更好的解决方案,特别是如果名称不是你给出的格式,就是有一个结构数组(或者只是一个图像数组,如果这些数字都是连续的)......
struct ImageStruct {
var image: UIImage
var index: Int
}
var imageStructs:[ImageStruct]... // Some code to fill these
...
@IBAction func buttonTapped(sender: UIButton) {
let matches = self.imageStructs.filter( { $0.image == sender.currentImage } )
if let match = matches.first {
// use match.index
}
}