如何缩短此代码以防止重复代码?

Pet*_*994 0 code-duplication swift

我有这个问题很长一段时间.我试图想象3门问题,只是为了乐趣和练习Swift.所以我有:

3扇门,因此所有门都有3种不同的IBAction和3种功能.这些功能都完全相同,但每个代码中只有门的数量不同.所以我想知道,我可以缩短这段代码吗?:

func openSecondChoice(whatDoorIsClickedOn: Int)
    {
        if whatDoorIsClickedOn == 1
        {
            if whatDoorIsClickedOn == doorWithNumber
            {
                UIButtonDoor1.setBackgroundImage( UIImage (named: "doorWithMoney"), for: UIControlState.normal)
            }
            else
            {
                UIButtonDoor1.setBackgroundImage( UIImage (named: "doorWithGoat"), for: UIControlState.normal)
            }
        }
        if whatDoorIsClickedOn == 2
        {
            if whatDoorIsClickedOn == doorWithNumber
            {
                UIButtonDoor2.setBackgroundImage( UIImage (named: "doorWithMoney"), for: UIControlState.normal)
            }
            else
            {
                UIButtonDoor2.setBackgroundImage( UIImage (named: "doorWithGoat"), for: UIControlState.normal)
            }
        }
        if whatDoorIsClickedOn == 3
        {
            if whatDoorIsClickedOn == doorWithNumber
            {
                UIButtonDoor3.setBackgroundImage( UIImage (named: "doorWithMoney"), for: UIControlState.normal)
            }
            else
            {
                UIButtonDoor3.setBackgroundImage( UIImage (named: "doorWithGoat"), for: UIControlState.normal)
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

育!这段代码太难看了!例如,如果用户按下door1,我正在调用函数"openSecondChoise(whatDoorIsClickedOn:1)".有没有办法缩短这个?谢谢!我不在这里使用课程,我应该使用它们吗?

eml*_*lai 5

通常,当你开始你的后面添加变量名1,2,3等,它的时间来使用数组来代替.这就是数组的用途.

使用uiButtonDoors包含UIButtonDoor1... 的数组UIButtonDoor3,您的函数可能如下所示:

func openSecondChoice(whatDoorIsClickedOn: Int) {
    let imageName = whatDoorIsClickedOn == doorWithNumber ? "doorWithMoney" : "doorWithGoat"
    uiButtonDoors[whatDoorIsClickedOn - 1].setBackgroundImage(UIImage(named: imageName), for: UIControlState.normal)
}
Run Code Online (Sandbox Code Playgroud)