iOS
Swift

if case let x?文の使いどころについて考えてみた

More than 3 years have passed since last update.

Swift2が公開されて変更点を見ていたところ、次のような文法が追加されていました。

let someOptional: Int? = 42

if case .Some(let x) = someOptional {
print(x)
}

if case let x? = someOptional {
print(x)
}

要はパターンマッチがif文にも開放されたのですが、Optionalのためにわざわざこのif case let x?という糖衣構文が追加されています。

しかし一体これ何に使うの?という感じです。なぜなら同じような役割であればすでにif let構文があるからです。

let someOptional: Int? = 42

if let x = someOptional {
print(x)
}

わざわざ文字数増やしてこれを使う理由がわかりません。

少し考えて、ちょっといいかなと思ったのが複数Optionalのアンラップです。

例えば3つのInt?型の変数があり、その3つの合計を計算するときのことを考えます。

let a: Int? = 10

let b: Int? = 11
let c: Int? = 12

これを計算するとき、Swift1.2だと次のようになります。

if let x = a, y = b, z = c {

println(x + y + z)
}

問題無いですね。

これをcase let文にすると次のように変わります。

if case let (x?, y?, z?) = (a, b, c) {

print(x + y + z)
}

どうでしょうか?好みもあると思いますが、個人的にはcase let文を使ったほうが見やすい気がします。

これを使って関数などでguard文と組み合わせ、Optionalを一気に外すみたいなやり方も

できるかなと思います。

func add(a: Int?, b: Int?, c: Int?) -> Int? {

guard case let (a?, b?, c?) = (a, b, c) else {
return nil
}
return a + b + c
}