Enum case ‘…’ n’est pas un membre de type ‘…’

J’ai un enum:

enum State { case FullOpen case HalfOpen case Closed } 

et ce 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 } } 

J’ai eu une erreur sur chaque déclaration de commutateur:

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

Je ne comprends pas vraiment pourquoi. Quelqu’un peut-il m’expliquer s’il vous plaît?

De cette façon ça va bien fonctionner:

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

Vous devez append ! .

Pour plus d’informations, se référer à THIS .

Si la variable de condition est dans un type différent de “État”. Vous devez utiliser la propriété rawValue.

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

Vous n’avez pas besoin de créer une variable temporaire ( previousState ). Déballez simplement la propriété que vous utilisez enum:

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