简体   繁体   English

枚举案例“...”不是“...”类型的成员

[英]Enum case '...' is not a member of type '...'

I have an enum:我有一个枚举:

enum State {
    case FullOpen
    case HalfOpen
    case Closed
}

and this code:这个代码:

var stateForConversionView: State!
...


var previousState: State!

if true {
    previousState = stateForConversionView!
    switch previousState {
    case .FullOpen:
        stateForConversionView = .HalfOpen
    case .HalfOpen:
        stateForConversionView = .FullOpen
    case .Closed:
        stateForConversionView = .HalfOpen
    default:
        break
    }
}

I got an error on each switch statement:每个 switch 语句都有一个错误:

Enum case 'FullOpen' not found in type 'State!'
Enum case 'HalfOpen' not found in type 'State!'
Enum case 'Closed' not found in type 'State!'

I don't really understand why.我真的不明白为什么。 Can someone explain me please?有人可以解释一下吗?

This way It will work fine : 这样就可以正常工作:

if true {
    previousState = stateForConversionView

    switch previousState! {
    case .FullOpen:
        stateForConversionView = .HalfOpen
    case .HalfOpen:
        stateForConversionView = .FullOpen
    case .Closed:
        stateForConversionView = .HalfOpen
    default:
        break
    }
}

You need to add ! 您需要添加! .

For more info refer THIS . 有关更多信息,请参见THIS

If the condition variable is in a different type of the "State". 如果条件变量处于不同类型的“状态”。 You should use rawValue property. 您应该使用rawValue属性。

var previousState:String
previousState = stateForConversionView
 switch previousState {
        case State.FullOpen.rawValue:
            stateForConversionView = .HalfOpen
        case State.HalfOpen.rawValue:
            stateForConversionView = .FullOpen
        case State.Closed.rawValue:
            stateForConversionView = .HalfOpen
        default:break

        }

You can add ?可以加? at the end of case state.在案例状态结束时。

if true {
    previousState = stateForConversionView

    switch previousState {
    case .FullOpen?:
        stateForConversionView = .HalfOpen
    case .HalfOpen?:
        stateForConversionView = .FullOpen
    case .Closed?:
        stateForConversionView = .HalfOpen
    default:
        break
    }
}

or .some(Error).some(Error)

if true {
    previousState = stateForConversionView

    switch previousState {
    case .some(.FullOpen):
        stateForConversionView = .HalfOpen
    case .some(.HalfOpen):
        stateForConversionView = .FullOpen
    case .some(.Closed):
        stateForConversionView = .HalfOpen
    default:
        break
    }
}

You don't need to create a temporary variable( previousState ). 您不需要创建一个临时变量( previousState )。 Just unwrap the property that you are using as enum: 只需解开您用作枚举的属性即可:

if true {
    switch stateForConversionView! {
    case .FullOpen:
        stateForConversionView = .HalfOpen
    case .HalfOpen:
        stateForConversionView = .FullOpen
    case .Closed:
        stateForConversionView = .HalfOpen
    default:
        break
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM