Случай Enum "..." не является членом типа "..."
У меня есть перечисление:
enum State {
case FullOpen
case HalfOpen
case Closed
}
и этот код:
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
}
}
У меня возникла ошибка для каждого оператора 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!'
Я действительно не понимаю, почему. Может ли кто-нибудь объяснить мне, пожалуйста?
Ответы
Ответ 1
Таким образом, он будет работать нормально:
if true {
previousState = stateForConversionView
switch previousState! {
case .FullOpen:
stateForConversionView = .HalfOpen
case .HalfOpen:
stateForConversionView = .FullOpen
case .Closed:
stateForConversionView = .HalfOpen
default:
break
}
}
Вам нужно добавить !
.
Для получения дополнительной информации см. ЭТО.
Ответ 2
Если переменная условия находится в другом типе "состояния". Вы должны использовать свойство 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
}
Ответ 3
Вам не нужно создавать временную переменную (previousState
). Просто разверните свойство, которое вы используете в качестве перечисления:
if true {
switch stateForConversionView! {
case .FullOpen:
stateForConversionView = .HalfOpen
case .HalfOpen:
stateForConversionView = .FullOpen
case .Closed:
stateForConversionView = .HalfOpen
default:
break
}
}