在Enum状态之间翻转的最佳方式是什么?
enum EVEN_ODD { case Even, Odd }
var __mode_bit = EVEN_ODD.Even;
for _ in 1...5 {
__mode_bit = (__mode_bit == .Even) ? .Odd : .Even
}
__mode_bit?:
可以简化吗?
答案 0 :(得分:3)
看看关于布尔值的Apple文档,他们举了一个布尔类型枚举的例子:https://developer.apple.com/swift/blog/?id=8
由于您可以从raw创建枚举,因此可以通过以下方式切换值:
let true = MyBool(rawValue: false)
西蒙
答案 1 :(得分:1)
我的偏好是使枚举符合_Incrementable
(由于某种原因,即使它看起来像是一个合理的非内部协议,也会被强调),并使其环绕。
enum EvenOdd {
case Even, Odd
}
extension EvenOdd: _Incrementable {
func successor() -> EvenOdd {
return self == .Even ? .Odd : .Even
}
}
EvenOdd.Odd.successor() // == .Even
这也为您提供免费的前/后增量运算符:
var bit = EvenOdd.Odd
++bit // bit now Even
++bit // bit now Odd
++bit // bit now Even etc
答案 2 :(得分:0)
Enums可以拥有!运营商为他们实施。
enum Parity { case Even, Odd }
prefix func !(a: Parity) -> Parity {
return a == .Even ? .Odd : .Even
}
现在我可以像
那样var parity_mode = Parity.Even
parity_mode = !parity_mode // .Odd
根据@Simon Gladman的回答参考Boolean