是否可以在枚举关联值条件和另一个枚举情况之间编写复合切换情况?

Kra*_*e93 3 enums swift

出于演示目的,我创建了下一个代码:

\n\n
enum 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\n
Run Code Online (Sandbox Code Playgroud)\n\n

编译错误信息是\'coverage\' must be bound in every pattern。正如我已经在谷歌上搜索到的,处理关联值的一种方法是比较同一枚举情况下值的不同状态。但这可能会导致代码重复,就像在我的示例中一样,我需要为.sunny和编写两个 case 语句.cloudy(let coverage) where coverage == 0。

\n\n

有没有正确、快捷的方法来处理此类案件?

\n

Mar*_*n R 5

您不需要匹配 where 子句.cloudy(coverage: 0),只需

\n\n
case .cloudy(coverage: 0), .sunny: \n    print("\xe2\x98\x80\xef\xb8\x8f")\n
Run Code Online (Sandbox Code Playgroud)\n\n

另一种选择是使用fallthrough,例如

\n\n
case .cloudy(let coverage) where coverage < 10:\n    fallthrough\ncase .sunny:\n    print("\xe2\x98\x80\xef\xb8\x8f")\n
Run Code Online (Sandbox Code Playgroud)\n