if文をふんだんに使えばもちろん同等な機能は実現できはするのですが、パターンマッチを使うことでよりシンプルで明確に記述することができるようになります。
1.ワイルドカードパターン
for _ in 1...3 {
// Do something three times.
}
たとえば、for文で何らかの処理を3回行いたいけれども、現在が何回目かどうかを気にする必要がないような場合には上記のコードを書きます。1...3は[1, 2, 3]を表し、中の点が3つなので3も含むことに注意してください。
2.値束縛パターン
let point = (3, 2)
switch point {
// Bind x and y to the elements of point.
case let (x, y):
println("The point is at (\(x), \(y)).")
}
switch分のcaseが一つしかありませんが、その中でpointの3と2をそれぞれxとyに割り当てています。
3.タプルパターン
let points = [(0, 0), (1, 0), (1, 1), (2, 0), (2, 1)]
- for (x, y) in points {
/* ... */
}
for...inの中で、それぞれの要素に対してパターンマッチを適用する際に利用します。
タプルの要素は全て変数である必要があります。
let point = (1, 2)
switch point {
case (0, 0):
println("(0, 0) is at the origin.")
case (-2...2, -2...2):
println("(\(point.0), \(point.1)) is near the origin.")
default:
println("The point is at (\(point.0), \(point.1)).")
}
数値の範囲等の条件を指定してパターンマッチを行います。switch文の中でのみ利用可能です。
// Overload the ~= operator to match a string with an integer
func ~=(pattern: String, value: Int) -> Bool {
return pattern == "\(value)"
}
switch point {
case ("0", "0"):
println("(0, 0) is at the origin.")
case ("-2...2", "-2...2"):
println("(\(point.0), \(point.1)) is near the origin.")
default:
println("The point is at (\(point.0), \(point.1)).")
}
式のマッチングオペレータは ~= で表され、これをオーバーロードすることによって、独自のマッチング機構を作り出すことができます。
総括
- Swiftではswitch文の出番がものすごくおおい
- パターンマッチを使って型を分解しよう
- 式のマッチングオペレータはオーバーロードできる
- iOS8 で採用されるSwift言語オーバービュー
- Swift言語の入門 (1) 変数編
- Swift言語の入門 (2) 列挙型編
- Swift言語の入門 (3) コレクション編
- Swift言語の入門 (5) 構造体編
- Swift言語の入門 (6) オプション型編
- Swift言語の入門 (7) クラス編
0 件のコメント:
コメントを投稿