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 まで Optional の Enum のインスタンスに対して 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 の記載が不要になったことで . を打つだけで分岐先の候補が一覧で補完されるようになり、書き味がより良くなったと思います。