Iganinのブログ

日頃の開発で学んだ知見を中心に記事を書いています。

【Swift】Swift5.1からOptionalのEnumのswitch文をより簡単にかけるようになった

はじめに

Swift5.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文での分岐に関してSwift5.1で変更があったため記載します。

環境設定

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

  • Swift5.1

内容

Swift 5.1から Optionalenumのプロパティをswitch文で分岐させる際に、 .some(T) のように記載する必要がなくなりました。 具体的には「はじめに」に記載したコードをSwift5.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の記載が不要になったことで . を打つだけで分岐先の候補が一覧で補完されるようになり、書き味がより良くなったと思います。