Xcode
Swift

enum の case name に none, some を使う前に

独自で定義したenumにnonesomeを使うと条件判定文で Optional型と競合しちゃうので気をつけましょうという話。

起こってしまったこと

case noneのあるenumを定義をしてしまったため
独自enumのnoneを判別し、処理したかったのに、
Optionalのnoneと判別するようなコードになってしまいました。

enum Meal {
case none    // 記録なし
case logged  // 記録済み 
case skipped // 食べなかった
}

var meal: Meal? = Meal.none

if meal == .none {
// ここはOptionalの`none`の時に処理される
}

解決案

@t-ea さんからのコメントより、以下のように書くときちんとOptionalを判別できます。
これから書くコードではこの条件式を利用すると、明確になっていいですね。

if meal == .some(.none) {
// ...
}

しかしながら、既存のcase nameをリファクタリング機能を使って変更すると既存のコードの意味合いが変わってしまう場合があるので、
nonesomeが使いたくなった場合は、違う名前をつけることも検討して見ましょう。

some none
done yet
complete incomplete
logged noLog
full empty
filled blank