Reputation: 6359
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?
Upvotes: 60
Views: 30472
Reputation: 1153
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
}
}
Upvotes: 0
Reputation: 233
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
}
}
Upvotes: -1
Reputation: 71854
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.
Upvotes: 132
Reputation: 3906
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
}
Upvotes: 3