your3i’s blog

iOSエンジニア。頑張る⚉

noneを含めたOptionalのenumを比較するとき要注意

例:

enum Foo: String {
    case hoge
    case none
}

var a: Foo = .none
print(a == .none) // true

var b: Foo? = Foo.none
print(b == .none) // false

こうなる理由は:
f:id:your3i:20180403231233p:plain

後者の`.none`がOptionalタイプの.noneになっている。
要するにnilだ。

print(nil == .none) // true

こういうのを防ぐために、ちゃんとunwrapするか、または.noneの前ちゃんとenum名前をつける。

var b: Foo? = Foo.none
print(b == Foo.none) // true
print(b! == .none) // true