[英]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 !
您需要添加
!
. 。
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.