Swift:如何在switch case语句中替换if else语句

3
我有这个 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")
    } 

它有效,但这是最好的解决方案吗?也许可以简化一下这段代码?

使用什么更好?if else还是switch case语句?


展示你尝试过的内容。解释你遇到了什么问题。 - rmaddy
@rmaddy 已更新。 - user8559575
你应该在条件语句章节中的Swift书籍中了解switch - rmaddy
2个回答

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
aItem 可以是一个 let 常量。编译器确保了明确(且唯一)的初始化,无需使用 var - Alexander
1
@Alexander 是的,声明为 let aItem: CGFloat 然后确保它在每个 casedefault 中都有一个值。但这不是问题(或答案)的重点。 - rmaddy

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")
        }
    }()
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接