如何重写(太)大IF语句的代码?

时间:2015-10-29 17:37:37

标签: swift loops if-statement uibutton uiimage

我有一个项目,其中显示了一些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语句?某种循环?

1 个答案:

答案 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
    }
}