首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swift:如何替换其他开关的case语句

问swift:如何替换其他开关的case语句
EN

Stack Overflow用户
提问于 2018-07-05 15:23:51
回答 2查看 3.3K关注 0票数 3

我有一张if else支票:

代码语言:javascript
复制
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语句替换这段代码。该怎么做呢?

我试过:

代码语言:javascript
复制
    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")
    } 

这是可行的,但这是最好的解决办法吗?也许可以简化这段代码?

还有什么更好用呢?如果是其他的还是换掉案例陈述?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-05 15:36:00

它应写成:

代码语言:javascript
复制
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,我会这样做:

代码语言:javascript
复制
let anItem: CGFloat = [457, 576, 758][item]

在这种情况下,使用if else和switch没有什么区别。选你最喜欢的。if和switch都有优势。使用最适合您需要的代码/逻辑。或者,在这种情况下,不要使用任何一种。

票数 5
EN

Stack Overflow用户

发布于 2018-07-05 16:48:27

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

代码语言:javascript
复制
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")
        }
    }()
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51194992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档