Xcode 10.2 - перечисление Swift 5 со связанными значениями вводит неправильный регистр - PullRequest
1 голос
/ 29 апреля 2019

Я только что обновил один из своих проектов до Swift 5, и у меня возникло довольно странное явление. Я использую GKStateMachine для обработки состояний в игре. При входе в состояние я также устанавливаю значение enum для соответствующего случая для более чистого общения с внешним миром. Теперь после обновления до Swift 5 это больше не работает должным образом.

Пример

Это перечисление:

public enum GameState: Equatable {
    case setup
    case preparing
    case calibrating(calibrationState: GameCalibrationState)
    case lostTrack
    case readyToPlay
    case running(canSkipItems: Bool)
    case handlingTask
    case paused
    case gameOver
}

Теперь в состоянии GameOver конечного автомата я делаю следующее:

class GameOverState: GKState {
    weak var gameManager: GameManagable?

    init(gameManager: GameManagable) {
        self.gameManager = gameManager
    }

    override func didEnter(from previousState: GKState?) {
        // Entered game over state and now trying to set game manager state to .gameOver:
        gameManager?.currentState = .gameOver
        // The currentState property state should now be set to .gameOver but is .lostTrack instead
    }

    override func isValidNextState(_ stateClass: AnyClass) -> Bool {
        switch stateClass {
        case is GameSetupState.Type:
            return true
        default:
            return false
        }
    }
}

Он входит в состояние и в методе »didEnter (from previousState: GKState?)« Я устанавливаю currentState моего объекта GameManager в .gameOver - пока все хорошо. Но почему-то это не работает, так как вместо него установлено значение .lostTrack. То же самое происходит с приостановленным состоянием с прерванным случаем.

И вывод консоли во время работы: console output

Интересно, что когда я изменяю порядок дел в перечислении, он также устанавливает другой случай. Кроме .paused и .gameOver все остальные, кажется, работают и настроены правильно. Это определенно работало раньше, и я понятия не имею, что может происходить. На данный момент мне кажется, что это системная ошибка

Скриншот соответствующих определений в GameManager: GameManager

Побочный эффект: он также работает, когда я избавляюсь от связанных значений перечислений.

Один и тот же результат в Xcode 10.2 и Xcode 10.2.1

Пример игровой площадки, которая воспроизводит проблему: https://www.sendspace.com/file/qudvzt

...