本文へスキップ
Hironobu Iga

Swift 5.1 から Optional な enum の switch が書きやすくなった

Swift 5.0 までは .some(.daily) と書く必要があったところが、5.1 では .daily と直接書けるようになりました。

公開日

この記事は別サイトにも掲載しています。 https://iganin.hatenablog.com/entry/2019/12/08/172711

はじめに

Swift 5.0 まで OptionalEnum のインスタンスに対して switch 文を使用する際は下記のように .some(T).none で記述する必要がありました。

enum Frequency {
    case daily
    case weekly
    case monthly
    case yearly
}

let frequency: Frequency? = .daily
switch frequency {
case .some(.daily): print("daily")
case .some(.weekly): print("weekly")
case .some(.monthly): print("monthly")
case .some(.yearly): print("yearly")
case .none: print("nil")
}

これは Swift では Optional が下記のような enum で表現されていることに起因します。

enum Optional<T> {
    case some(T)
    case none
}

この switch 文での分岐に関して Swift 5.1 で変更があったため記載します。

環境設定

以下の環境を使用しています。

  • Swift 5.1

内容

Swift 5.1 から Optional の enum のプロパティを switch 文で分岐させる際に、.some(T) のように記載する必要がなくなりました。 具体的には「はじめに」に記載したコードを Swift 5.1 では下記のように記述することができます。

enum Frequency {
    case daily
    case weekly
    case monthly
    case yearly
}

let frequency: Frequency? = .daily
switch frequency {
case .daily: print("daily")
case .weekly: print("weekly")
case .monthly: print("monthly")
case .yearly: print("yearly")
case .none: print("nil")
}

まとめ

細かな変更ですが .some の記載が不要になったことで . を打つだけで分岐先の候補が一覧で補完されるようになり、書き味がより良くなったと思います。