如何增加swift int枚举

时间:2014-12-08 20:54:10

标签: swift

我有一个快速的枚举

 enum MainState : Int {
     case NotStarted
     case Init
     case AskWhatToText
     case RecordWhatToText
 }    
 var state = MainState.NotStarted

并且想做类似

的事情
state++

但是收到错误。建议?

2 个答案:

答案 0 :(得分:6)

这不是C,其中枚举是整数。在swift中,枚举是一种正确的类型,你不能对它进行数学运算。

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

var newState = MainState(rawValue: state.rawValue + 1)

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

答案 1 :(得分:4)

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

但是,不能说你不能制作适合你想要使用枚举的设计的操作符。此示例尝试增加超过最大值的无操作:

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

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

相关问题