出于演示目的,我创建了下一个代码:
\n\nenum WeatherType {\n case cloudy(coverage: Int)\n case sunny\n case rainy\n}\n\nlet today: WeatherType = .cloudy(coverage: 0)\n\nswitch today {\ncase .cloudy(let coverage) where coverage == 0, .sunny: // <-- This line doesn\'t compile\n print("\xe2\x98\x80\xef\xb8\x8f")\ncase .cloudy(let coverage) where 1...100 ~= coverage:\n print("\xe2\x98\x81\xef\xb8\x8f")\ncase .rainy:\n print("")\ndefault:\n print("Unknown weather")\n}\n\nRun Code Online (Sandbox Code Playgroud)\n\n编译错误信息是\'coverage\' must be bound in every pattern。正如我已经在谷歌上搜索到的,处理关联值的一种方法是比较同一枚举情况下值的不同状态。但这可能会导致代码重复,就像在我的示例中一样,我需要为.sunny和编写两个 case 语句.cloudy(let coverage) where coverage == 0。
有没有正确、快捷的方法来处理此类案件?
\n您不需要匹配 where 子句.cloudy(coverage: 0),只需
case .cloudy(coverage: 0), .sunny: \n print("\xe2\x98\x80\xef\xb8\x8f")\nRun Code Online (Sandbox Code Playgroud)\n\n另一种选择是使用fallthrough,例如
case .cloudy(let coverage) where coverage < 10:\n fallthrough\ncase .sunny:\n print("\xe2\x98\x80\xef\xb8\x8f")\nRun Code Online (Sandbox Code Playgroud)\n