SwiftでTupleとCaseを組み合わせて使う
環境: Swift2.2
タプルとcaseを組み合わせて使うと便利だったのでメモ。
Switch(case)文で使う
オプショナル型な複数の値の組み合わせで場合分けしたい場合に使う。
また値はアンラップして取り出して変数にバインドする。
ポイントはcase部分で「?」をつけること。これでオプショナル型でnilでない場合にマッチする。
let num: Int? = ... let str: String? = ... switch(num, str) { case let (num?, str?): // num, strともオプショナル型でnil以外にマッチ // case let (.Some(num), .Some(str)): // これでもよい print("num: \(num), str: \(str)") case (let num?, nil): // numはオプショナル型でnil以外、strはnilにマッチ // case (.Some(let num), nil): // これでもよい print("num: \(num)") case case (nil, _?): // numはnil、strはオプショナル型でnil以外にマッチ // case (nil, .Some(_)): // これでもよい break default: // num、strともにnilにマッチ break }
if let
の代わりにif case let
に使う
if case let
でパターンマッチが利用できる。
オプショナルをアンラップして変数にバインド。
これもポイントはcase部分で「?」をつけること。
// a は Optional if case let x? = a { } // 以下と同じ if case .Some(let x) = a { }
そしてタプルを組み合わせて使うと、複数の値を一気にバインドできる。
if let
よりスッキリ書ける気がする。
if let
// a, b, c は Optional if let x = a, let y = b, let z = c { }
if case let
if case let (x?, y?, z?) = (a, b, c) { }
参考:
Swift2のパターンマッチ構文集(ほぼ翻訳) - Qiita
http://qiita.com/mono0926/items/f2875a9eacef53e88122