Swift:在

时间:2016-09-04 08:51:22

标签: swift enums switch-statement mutating-function

我一直在这里搜索很多问题,我找到了一个类似标题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”类型中找不到枚举“案例”

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:4)

必须在函数之外声明案例:

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

建议: - 浏览Enumeration - Apple Documentation