enum переключает разные случаи - PullRequest
0 голосов
/ 27 сентября 2018
enum TriStateSwitch {

    case off, low, high

    mutating func next() {
        switch self {
        case .off:
            self = .low
        case .low:
            self = .high
        case .high:
            self = .off
        }
    }
}

var ovenLight = TriStateSwitch.low
ovenLight.next()
ovenLight.next()

Когда я пытаюсь запустить экземпляр в первый раз, он дает мне high, а когда я запускаю тот же экземпляр во второй раз, он показывает мне low Я не понимаю, что происходит с детской площадкой, более того, яподозреваю, что проблема все еще со мной.

Где я иду не так?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Если вы добавите некоторые операторы печати, вы обнаружите, что ваше перечисление действует точно так, как должно:как это создано.В первый раз, когда вы звоните next(), он переходит на максимум.В следующий раз, когда вы позвоните next(), он перейдет в выключенное состояние.

0 голосов
/ 27 сентября 2018

Да, ваш код меняет один и тот же экземпляр, и ваш код действует последовательно на ваш экземпляр.Я посмотрю, смогу ли я объяснить:

Здесь мы можем увидеть каждую часть вашего кода

1.

var ovenLight = TriStateSwitch.low

Итак, мы .low

2.

ovenLight.next()

Если мы .low (которым мы были), мы попадаем в этот случай:

case .low:
    self = .high

, поэтому мы высоки

3.

ovenLight.next()

Если мы .высокие (какими мы были), мы попадаем в этот случай:

case .high:
    self = .off

, поэтому мы .off

Имеет ли это смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...