【发布时间】:2019-06-06 17:06:55
【问题描述】:
出于演示目的,我创建了下一个代码:
enum WeatherType {
case cloudy(coverage: Int)
case sunny
case rainy
}
let today: WeatherType = .cloudy(coverage: 0)
switch today {
case .cloudy(let coverage) where coverage == 0, .sunny: // <-- This line doesn't compile
print("☀️")
case .cloudy(let coverage) where 1...100 ~= coverage:
print("☁️")
case .rainy:
print("????")
default:
print("Unknown weather")
}
编译错误消息是'coverage' must be bound in every pattern。正如我已经用谷歌搜索过的那样,使用关联值的一种方法是比较同一枚举案例中值的不同状态。但这可能会导致代码重复,例如在我的示例中,我需要为.sunny 和.cloudy(let coverage) where coverage == 0 编写两个case 语句。
有没有正确、快捷的方式来处理此类案件?
【问题讨论】:
-
覆盖率为 0 的云在您的数据模型中应该是无效的。一旦它成为非法值,您就不必担心到处处理它。
-
感谢您的评论,但这是仅为演示目的创建的代码,只是为了了解开关/案例功能。