迅捷:如何在switch case语句上替换if if else

时间:2018-07-05 15:23:52

标签: ios swift switch-statement

我有这张if else支票:

var aItem: CGFloat = 0

if item == 0 {
    aItem = 457

} else if item == 1 {
    aItem = 576

} else if item == 2 {
    aItem = 758

}

print(aItem)

我想用switch case语句替换这段代码。怎么做?

我尝试过:

    var aItem: CGFloat = 0

    switch item {
    case _ where item == 0:

        aItem = 457

    case _ where item == 1:

        aItem = 576

    case _ where item == 2:

        aItem = 758

    default:
        print("this is impossible")
    } 

这是可行的,但是最好的解决方案是吗?也许可以以某种方式简化此代码?

什么更好用?否则还是切换案例陈述?

2 个答案:

答案 0 :(得分:5)

它应该写为:

let aItem: CGFloat

switch item {
case 0:
    aItem = 457
case 1:
    aItem = 576
case 2:
    aItem = 758
default:
    aItem = 0
    print("this is impossible")
}

print(aItem)

如果您的item只能是0、1或2,我会这样做:

let anItem: CGFloat = [457, 576, 758][item]

在这种情况下,使用if elseswitch之间几乎没有区别。选择你喜欢的。 ifswitch有优势。使用最适合您所需代码/逻辑的代码。或者,在这种情况下,请勿使用任何一个。

答案 1 :(得分:1)

这是另一个有趣的替代方法(例如,在初始化实例属性时可能很有用:

struct SomeType {
    let someProperty: Int = {
        let x = 0

        switch x { // Unfortunately, `x` can't be an instance member of self.
        case 0: return 457
        case 1: return 576
        case 2: return 758
        default:
            fatalError("this is impossible")
        }
    }()
}