2015-05-05 60 views
3

在Enum狀態之間翻轉的最佳方式是什麼?模式翻轉枚舉var

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

如果'EVEN_ODD'只是使用2案件爲什麼不使用布爾? – Eendje

+1

@JacobsonTalom,因爲我在switch語句中使用EVEN_ODD枚舉。 –

回答

0

枚舉可以有!運營商爲他們實施。

enum Parity { case Even, Odd } 
prefix func !(a: Parity) -> Parity { 
    return a == .Even ? .Odd : .Even 
} 

現在我可以基於@Simon格萊德曼答案參考Boolean

3

看看在布爾蘋果的文檔,他們給布爾的一個例子類型的枚舉:

let true = MyBool(rawValue: false) 
https://developer.apple.com/swift/blog/?id=8

既然你可以創建一個從原始的枚舉,你可以通過切換值

Simon

+0

TY。我相信我已經根據你的文章找到了很好的實現。 –

1

東西一樣

var parity_mode = Parity.Even 
parity_mode = !parity_mode // .Odd 

我更傾向於將讓枚舉符合_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