二 swift之switch condition evaluates to a constant
2016-12-22 16:42
1031 查看
前言
今天在学习swift的枚举(enum)类型时,发现了一个奇怪的问题,先上code才方便说明:
警告:
从上面的完整code我们知道,很多人都会认为没有任何的问题,的确,编译和运行都成功通过,打印结果:
he is ZhangSan
但是,对于一个有十分严重的强迫症的人来说,这是很难容忍的,于是我花了近一个小时去了解这个warning产生的reason,不幸的是,我并没有找到或者说理解这到底是什么原因,幸运的是,我解决了这个warning的问题,再上code,看看和刚才的区别:
然后,warning就没有了。
why?
但把 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 设置为全局之后就没有了警告,可以当设置为局部变量时就产生了警告,虽然后面是解决了,但我心里还是蛮郁闷的,后续有时间,再深究一下为什么要设置为全局?为什么不能设置为局部?虽然局部的时候也可以编译和运行成功,但要对于追求完美的人来说,这是心里的一个疙瘩。
相关文章推荐
- Switch to Swift.
- switch语句: 编译错误case label does not reduce to an integer constant
- 7.2 Swift中switch匹配枚举
- Selenium - IWebDriver.SwitchTo() frame 和 Window 的用法
- selenium之 一个不常用但又很有用的方法(switch_to.active_element),获取当前焦点元素
- switch中出错:case expressions must be constant expressions
- warning:deprecated conversion from string constant to 'char *'解决方案
- how to use the mathmatical constant "e" in conjunction with a vector
- Reset a Cisco 2960 Switch To Factory Default Settings
- Cannot update paths and switch to branch at the same time
- How to zone a Brocade SAN switch in command line base?
- how to keep impact-crusher in good condition
- Would it be faster to batch SetVertex/PixelShaderConstant calls?
- ScriptBasedMapping,CachedDNSToSwitchMapping,AbstractDNSToSwitchMapping,DNSToSwitchMapping类层次分析
- AttributeError: 'WebDriver' object has no attribute 'switchTo' 解决方法
- How to make awesome UI components in iOS 8 using Swift and XCode 6
- how-to-use-swift
- {welcome to JS} 使用多级条件(switch&case)
- 启动swift服务的时候出现Exception: Could not bind to 0.0.0.0:8080 after trying for 30 seconds
- 2.7.2 元素定位:frame 内定位 driver.switch_to.frame()