在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?:
嗎?
在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?:
嗎?
枚舉可以有!運營商爲他們實施。
enum Parity { case Even, Odd }
prefix func !(a: Parity) -> Parity {
return a == .Even ? .Odd : .Even
}
現在我可以基於@Simon格萊德曼答案參考Boolean
看看在布爾蘋果的文檔,他們給布爾的一個例子類型的枚舉:
let true = MyBool(rawValue: false)
:
https://developer.apple.com/swift/blog/?id=8
既然你可以創建一個從原始的枚舉,你可以通過切換值
Simon
TY。我相信我已經根據你的文章找到了很好的實現。 –
東西一樣
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
如果'EVEN_ODD'只是使用2案件爲什麼不使用布爾? – Eendje
@JacobsonTalom,因爲我在switch語句中使用EVEN_ODD枚舉。 –