如何增加swift int枚举

foo*_*675 2 swift

我有一个快速的枚举

 enum MainState : Int {
     case NotStarted
     case Init
     case AskWhatToText
     case RecordWhatToText
 }    
 var state = MainState.NotStarted
Run Code Online (Sandbox Code Playgroud)

并希望做类似的事情

state++
Run Code Online (Sandbox Code Playgroud)

但得到一个错误.建议?

Abh*_*ert 7

这不是C,其中枚举是整数.在swift中,枚举本身就是一种合适的类型,你不能对它进行数学运算.

但是,您可以获取整数的原始值,并对其进行数学运算.然后创建一个新的枚举:

var newState = MainState(rawValue: state.rawValue + 1)
Run Code Online (Sandbox Code Playgroud)

请注意,"newState"是可选的.null如果枚举中不存在rawValue + 1,您将获得.


ric*_*ter 6

当你增加一个枚举时你想发生什么?当它在RecordWhatToText状态上并且您再次增加它时,或者在NotStarted状态上并且您减少它时会发生什么?这些问题更多地与您的枚举有关,而与一般的枚举设计关系不大。(毕竟,一个枚举的设计者可能希望它循环,另一个可能希望它保持在最大值,另一个可能想让增加超过最大值是一个错误。)我认为这至少是一部分为什么自定义枚举不带有开箱即用的增量运算符。

不过,并不是说您不能制作适合您希望使用枚举的设计的自己的运算符。此示例使尝试递增超过最大值成为无操作:

postfix func ++(inout state: MainState) {
    if let newValue = MainState(rawValue: state.rawValue + 1) {
        state = newValue
    } else {
        // leave state alone
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,prefix func ++如果您还想要预增量,您还需要创建一个,并且您也可以考虑创建自减运算符。