Enum case '...' is not a member of type '...'
IosSwiftIos Problem Overview
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:
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?
Ios Solutions
Solution 1 - Ios
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.
Solution 2 - Ios
If the condition variable is in a different type of the "State". You should use rawValue property.
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
}
Solution 3 - Ios
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)
if true {
previousState = stateForConversionView
switch previousState {
case .some(.FullOpen):
stateForConversionView = .HalfOpen
case .some(.HalfOpen):
stateForConversionView = .FullOpen
case .some(.Closed):
stateForConversionView = .HalfOpen
default:
break
}
}
Solution 4 - Ios
You don't need to create a temporary variable(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
}
}