Подтвердить что ты не робот

Случай 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!'

Я действительно не понимаю, почему. Может ли кто-нибудь объяснить мне, пожалуйста?

4b9b3361

Ответ 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
    }
}