ENUMERATION

最后更新于:2022-04-01 04:44:29

## ENUMERATION - 枚举(Enum)可以将一系列相关的值定义为一个组类型,通过如下语法创建 enum: ~~~ enum WeatherType { case Sun, Cloud, Rain, Wind, Snow } ~~~ 下面看看如何使用枚举类型: ~~~ func getHaterStatus(weather: WeatherType) -> String? { if weather == WeatherType.Sun { return nil } else { return "Hate" } } getHaterStatus(WeatherType.Cloud) ~~~ 也可以这么定义枚举: ~~~ enum WeatherType { case Sun case Cloud case Rain case Wind case Snow } ~~~ 也可以这么使用枚举: ~~~ func getHaterStatus(weather: WeatherType) -> String? { if weather == .Sun { return nil } else { return "Hate" } } //Swift 通过 Type inference 知道你与 WeatherType 类型比较,所以无需写明枚举类型,但是这种写法 Swift 将不会提供代码补足建议辅助 getHaterStatus(.Cloud) ~~~ 枚举在 switch/case 中十分有用,因为 Swfit 知道你的枚举类型中都都有什么值,所以能确保你涵盖了所有的 case: ~~~ func getHaterStatus(weather: WeatherType) -> String? { switch weather { case .Sun: return nil case .Cloud, .Wind: return "dislike" case .Rain: return "hate" } //这段代码不会成功编译,应该添加 case .Snow 或是 default case。 } ~~~ 对于 Enum,Swift 还有一个非常强大的特性:可以为组中的值再附加一个值,进一步细分: ~~~ enum WeatherType { case Sun case Cloud case Rain case Wind(speed: Int) case Snow } ~~~ 如此,使用 switch/case 时就有了额外的条件,当条件都满足时 case 才会匹配: ~~~ func getHaterStatus(weather: WeatherType) -> String? { switch weather { case .Sun: return nil case .Wind(let speed) where speed < 10: //meh return "meh" case .Cloud, .Wind: return "dislike" case .Rain, .Snow: return "hate" } } getHaterStatus(WeatherType.Wind(speed: 5)) ~~~ 代码段第五行的 let 关键字的用途是声明一个能引用的常量名保存传入的参数,通过 Where 关键字来声明条件。 Swift 从上至下判断 switch/case 语句,所以请注意 case 的排序。
';