我有一个快速的枚举
enum MainState : Int {
case NotStarted
case Init
case AskWhatToText
case RecordWhatToText
}
var state = MainState.NotStarted
并且想做类似
的事情state++
但是收到错误。建议?
答案 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 ++
,并且您也可以考虑制作减量运算符。