模式翻转Enum var

时间:2015-05-05 07:36:25

标签: swift

在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?:可以简化吗?

3 个答案:

答案 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