您的位置:首页 > 移动开发 > Swift

二 swift之switch condition evaluates to a constant

2016-12-22 16:42 1031 查看
前言

今天在学习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 设置为全局之后就没有了警告,可以当设置为局部变量时就产生了警告,虽然后面是解决了,但我心里还是蛮郁闷的,后续有时间,再深究一下为什么要设置为全局?为什么不能设置为局部?虽然局部的时候也可以编译和运行成功,但要对于追求完美的人来说,这是心里的一个疙瘩。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  swift