Swift: 枚举类型中找不到对应的枚举值

7

我在这里搜索了很多问题,发现一个标题类似的问题Enum case switch not found in type,但对于我来说没有解决方法。

我想使用枚举并自我变异来解决问题,在各个状态下,下一个交通灯颜色是什么。

enum TrafficLights {
    mutating func next() {
        switch self {
        case .red:
            self = .green
        case .orange:
            self = .red
        case .green:
            self = .orange
        case .none:
            self = .orange
        }
    }
}

我已经将所有可能的情况都列出来了,但仍然返回错误信息:

在类型为'TrafficLights'的枚举中未找到'case'


我感到困惑,我以为如果所有情况都在可变函数内部,它们就不需要在该函数外部定义。谢谢。 - GiorgioE
3
希望这不是用于真实交通信号灯的。 - Alnitak
2个回答

11

我在将一个Int转换为自定义枚举时遇到了同样的错误:

switch MyEnum(rawValue: 42) {
case .error:
    // Enum case `.error` not found in type 'MyEnum?'
    break
default:
    break
}
问题在于MyEnum(rawValue: 42)返回了一个可选值。解包它或提供一个非可选项以允许枚举切换:
switch MyEnum(rawValue: 42) ?? MyEnum.yourEnumDefaultCase {
case .error:
    // no error!
    break
default:
    break
}

2
我建议用户尝试另一种解包方式,可以使用默认值和 ?? 运算符:(MyEnum(rawValue: 42) ?? MyEnum.error) - dulgan

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
    }
  }
}

建议:阅读 枚举 - Apple文档


谢谢!我的基本问题。现在它可以工作了,所以如果我从可变函数中移除 case .none,即使我不需要在该状态之后执行下一步,它仍然会定义这个 case。这就是我一直在寻找的。 - GiorgioE
文档:- https://developer.apple.com/library/mac/documentation/Swift/Conceptual/Swift_Programming_Language/Enumerations.html.. :)祝编码愉快 - Dravidian
4
可以将这些情况在一行中添加,如 case green, red, orange, none - pedrouan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接