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
}