如何使if语句更有效?

时间:2016-07-25 19:53:00

标签: swift if-statement

为应用程序编写一些快速代码,虽然它工作正常,但我可以帮助但是认为它很难看并且可以改进,我仍然是新的并且总是在寻找方法改进我的代码所以任何帮助表示赞赏。在上下文中,它是一个滑块和几个标签。

    var value1 = Int (sender.value)

    value1text.text = "\(value1)"

    var value2:Int

    if value1 <= 5 {
        endText.text = "\(7 - value1)"
    } else if value1 == 6 {
        value1 = 2
        value2 = 6
        endText.text = "\(value1)/\(value2)"
    } else if value1 == 7 {
        value1 = 2
        value2 = 5
        endText.text = "\(value1)/\(value2)"
    } else if value1 == 8 {
        value1 = 2
        value2 = 4
        endText.text = "\(value1)/\(value2)"
    } else if value1 == 9 {
        value1 = 2
        value2 = 3
        endText.text = "\(value1)/\(value2)"
    } else if value1 == 10 {
        value1 = 2
        value2 = 2
        endText.text = "\(value1)/\(value2)"
    }

我的vars在我的应用程序中更好命名,只是为了更容易阅读而重命名(希望如此)。

4 个答案:

答案 0 :(得分:4)

使用Switch statement

var value1 = Int(sender.value) //TODO: Give me a better name!

value1text.text = String(value1) //Don't use String interpolation solely for conversion

switch (value1) {
case Int.min...5:
    endText.text = String(7 - value1)
case let x where 6...10 ~= x:
    value1 = 2
    value2 = 12 - x
    endText.text = "\(value1)/\(value2)"
default:
    fatalError("What happens now?")
}

更简单/更好地实施第二种情况,感谢Sulthan

case 6...10:
    value2 = 12 - value1
    value1 = 2
    endText.text = "\(value1)/\(value2)"

答案 1 :(得分:3)

一般批评: value1value2实际上不是描述性名称,因此为了使您的代码更具可读性,您可以为它们提供更具描述性的名称。

在不知道值变量代表什么的情况下,我不确定6 7和8的值是指什么。但是,我知道magic numbers也会使代码的可读性降低。如果对您的代码有意义,请考虑将这些神奇数字转换为enumeration

最后,你可以用switch statement

替换很多if语句

答案 2 :(得分:1)

我使用像这样的开关语句,类似于AMomchilov的回答。 switch语句提高了可读性,并使以后更容易改进。

这是使用switch语句的代码:

var value1 = Int(sender.value)

value1text.text = String(value1)

switch (value1) {

    case Int.min...5: // any value below or equal to 5
        endText.text = String(7 - value1)

    case 6...10: // between 6 and 10
        value1 = 2
        value2 = 6
        endText.text = "2/6"

    default: // else
        //do nothing
}

答案 3 :(得分:1)

您正在将value1678910进行比较,并针对所有这些条件执行相同的操作除了value1 <= 5。 您可以通过以下方式缩短此代码:

  1. 创建一个字典,其密钥为value1,值为您要替换的字符,为["6":"6","7":"5","8":"4","9":3,"10":"2"] 检查您的值是否包含keys myDict

     var myDict = ["6":"6","7":"5","8":"4","9":3,"10":"2"]
    
         if value1 <= 5 {
                endText.text = "\(7 - value1)"
         } else if Array(myDict.keys).contains(String(value1)) {
                value2 = myDict[String(value1)]
                value1 = 2
                endText.text = "\(value1)/\(value2)"
         }
    
  2. 检查if语句中的value1的所有值:

     if value1 <= 5 {
         endText.text = "\(7 - value1)"
    }
    else if(value1 == 6 || value1 == 7 || value1 == 8 || value1 == 9 || value1 == 10) {
      value2 = myDict[String(value1)]
      value1 = 2
      endText.text = "\(value1)/\(value2)"
    }