Xcode 10.2 –具有关联值的Swift 5枚举输入了错误的大小写

时间:2019-04-29 11:13:01

标签: ios swift enums swift5 xcode10.2

我刚刚将我的一个项目更新为Swift 5,并且发生了一件很奇怪的事情。 我正在使用GKStateMachine处理游戏的状态。进入状态时,我还将枚举的值设置为相关的大小写,以便与外界进行更清晰的通信。 现在,在更新到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?)«方法中,将GameManager对象的currentState设置为.gameOver,到目前为止,效果很好。但是以某种方式,这是行不通的,因为它改为设置为.lostTrack。对于处于.paused情况的暂停状态,情况也是如此。

运行时控制台输出: console output

有趣的是,当我更改枚举中的案例顺序时,它也将其设置为其他案例。除了.paused和.gameOver以外,其他所有似乎都可以正常工作并正确设置。 以前肯定是可行的,我不知道会发生什么。在我看来,这似乎是一个系统错误

GameManager中相关定义的屏幕截图: GameManager

Sidefact:当我摆脱枚举案例的关联值时,它也起作用。

Xcode 10.2和Xcode 10.2.1的结果相同

再现问题的示例游乐场: https://www.sendspace.com/file/qudvzt

0 个答案:

没有答案