Swift:在类型中找不到枚举案例

Gio*_*ioE 7 enums switch-statement swift mutating-function

我一直在这里寻找很多问题,我发现一个类似标题的枚举案例开关没有在类型中找到,但对我来说没有解决方案.

我想使用带有自身变异的枚举来解决问题,在个别状态下,下一个交通灯颜色是什么.

enum TrafficLights {
    mutating func next() {
        switch self {
        case .red:
            self = .green
        case .orange:
            self = .red
        case .green:
            self = .orange
        case .none:
            self = .orange
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我已将所有案例作为可能的选项,它仍然返回错误:

在'TrafficLights'类型中找不到枚举"案例"

pka*_*amb 11

将Int转换为自定义枚举时,我遇到了同样错误的问题:

switch MyEnum(rawValue: 42) {
case .error:
    // Enum case `.error` not found in type 'MyEnum?'
    break
default:
    break
}
Run Code Online (Sandbox Code Playgroud)

问题是MyEnum(rawValue: 42)返回一个可选项.打开它或提供非可选项以允许打开枚举:

switch MyEnum(rawValue: 42) ?? MyEnum.yourEnumDefaultCase {
case .error:
    // no error!
    break
default:
    break
}
Run Code Online (Sandbox Code Playgroud)

  • 我建议使用另一种解包方式,例如使用`??`的默认值:`(MyEnum(rawValue:42)?? MyEnum.error)` (2认同)

Dra*_*ian 5

这些情况必须在函数外部声明:

enum TrafficLights {

case green
case red
case orange
case none

mutating func next() {
    switch self {
    case .red:
        self = .green
    case .orange:
        self = .red
    case .green:
        self = .orange
    case .none:
        self = .orange
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

建议:- 进行枚举 - Apple 文档

  • 也可以将这些情况添加到一行中,例如“case green、red、orange、none”。 (4认同)