二 swift之switch condition evaluates to a constant

在学习 Swift 枚举时遇到一个关于 switch 语句的警告,即使代码能正常运行和编译。通过改变 `let who = Names.ZhangSan` 的作用域,警告消失。本文探讨了这个问题的原因以及解决方法,尽管警告消除,但作者对为何必须使用全局变量而非局部变量感到疑惑,希望能进一步探究。

前言
今天在学习swift的枚举(enum)类型时,发现了一个奇怪的问题,先上code才方便说明:

import UIKit

//定义了一个枚举类型
enum Names {
    case XiaoMing
    case ZhangSan
    case Lisi
    case WangWu
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let who = Names.ZhangSan

        //我们发现,who这里发生了一个warning:switch condition evaluates to a constant.
        switch who {

        case .XiaoMing:
            print("he is XiaoMing")
        case .ZhangSan:
            print("he is ZhangSan")
        case .Lisi:
            print("he is Lisi")
        default:
            print("he is WangWu")

        }


    }

}

警告:
这里写图片描述
从上面的完整code我们知道,很多人都会认为没有任何的问题,的确,编译和运行都成功通过,打印结果:
he is ZhangSan

但是,对于一个有十分严重的强迫症的人来说,这是很难容忍的,于是我花了近一个小时去了解这个warning产生的reason,不幸的是,我并没有找到或者说理解这到底是什么原因,幸运的是,我解决了这个warning的问题,再上code,看看和刚才的区别:

import UIKit

enum Names {
    case XiaoMing
    case ZhangSan
    case Lisi
    case WangWu
}

let who = Names.ZhangSan

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        switch who {

        case .XiaoMing:
            print("he is XiaoMing")
        case .ZhangSan:
            print("he is ZhangSan")
        case .Lisi:
            print("he is Lisi")
        default:
            print("he is WangWu")

        }


    }

}

然后,warning就没有了。

why?

但把 let who = Names.ZhangSan 设置为全局之后就没有了警告,可以当设置为局部变量时就产生了警告,虽然后面是解决了,但我心里还是蛮郁闷的,后续有时间,再深究一下为什么要设置为全局?为什么不能设置为局部?虽然局部的时候也可以编译和运行成功,但要对于追求完美的人来说,这是心里的一个疙瘩。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值