Swiftのswitch文の使い方と応用例17選

Swiftのswitch文を詳しく解説するイメージSwift
この記事は約27分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

SwiftはAppleによって開発されたプログラミング言語であり、iOS、macOS、watchOS、tvOSといったAppleのプラットフォーム向けのアプリケーション開発に主に使用されています。

Swiftの特徴の一つに、安全性の高い設計や直感的な文法が挙げられます。

そして、その中でもswitch文は、多岐にわたる条件分岐を綺麗に、そして効率的に扱うことができる強力な文法として知られています。

今回の記事では、Swift言語でのswitch文の詳細な使い方、注意点、カスタマイズ方法を徹底的に解説します。

Swiftのswitch文に関する知識をゼロから学びたい初心者の方はもちろん、既に基本的な知識を持っている方でも、さらなる深みを求めている方にも役立つ内容となっています。

17のサンプルコード付きで、一つ一つの機能や使い方を具体的に理解していきましょう。

●Swiftのswitch文とは

switch文とは、ある変数や値が与えられた時に、その値に応じて異なる処理を行いたい場合に使用する制御文の一つです。

特に、3つ以上の選択肢がある場合や、複雑な条件を持つ場合にif文よりも簡潔に、そして読みやすく書くことができます。

Swiftのswitch文は他の多くのプログラミング言語のそれとは異なり、非常に柔軟性が高いのが特徴です。

例えば、複数の値を一度にマッチさせたり、値の範囲やパターンを指定してマッチさせることができます。

また、タプルやenumといったデータ型と組み合わせて使用することで、さらに高度な条件分岐を行うことができるようになります。

○switch文の基本

switch文の基本的な構文は次のようになります。

switch 対象の変数や値 {
case 値1:
    // 値1にマッチした時の処理
case 値2:
    // 値2にマッチした時の処理
default:
    // どのcaseにもマッチしない時の処理
}

この構文を見るとわかるように、Swiftのswitch文はそれぞれのcaseで指定した値に対象の変数や値がマッチするかどうかをチェックしています。

そして、マッチしたcaseの処理が実行されます。もし、どのcaseにもマッチしない場合は、defaultの処理が実行されます。

Swiftのswitch文は、一つのcaseが真となった時点で、それ以降のcaseは評価されず、switch文自体が終了します。

これにより、複数のcaseが真となるようなことはありません。

また、Swiftのswitch文の大きな特徴として、各caseでのbreak文の記述が不要である点が挙げられます。

他の多くの言語では、一つのcaseが真となった後、次のcaseへの処理が流れてしまわないようにbreak文を記述する必要がありますが、Swiftではその必要がありません。

一つのcaseが真となった時点で、自動的にswitch文の処理が終了するからです。

●Swiftのswitch文の使い方

Swiftのswitch文は、多岐にわたる条件を分岐させるときに非常に有効な文法です。

多くのプログラミング言語に似たswitch文が存在しますが、Swiftのswitch文は他の言語とは少し異なる特性や利点があります。

ここでは、Swiftのswitch文の基本的な使い方を、詳細な説明とサンプルコードを交えてご紹介します。

○サンプルコード1:基本的なswitch文の書き方

Swiftのswitch文の基本的な書き方を見ていきましょう。

let animal = "犬"
switch animal {
case "犬":
    print("これは犬です")
case "猫":
    print("これは猫です")
default:
    print("それ以外の動物です")
}

このコードでは、animalという文字列変数を使ってswitch文を表しています。

この例では、animalの内容に応じて、適切なメッセージを出力しています。

case文で指定した文字列とanimalの値が一致した場合、そのcase内の処理が実行されます。

もし、どのcaseにも当てはまらない場合は、default節の処理が実行されます。

このコードを実行すると、「これは犬です」と表示されます。

○サンプルコード2:値の範囲を指定してマッチさせる

Swiftのswitch文は、値の範囲を指定してマッチさせることも可能です。

これにより、特定の範囲の値に対して処理を行うことができます。

let score = 85
switch score {
case 0..<60:
    print("不合格")
case 60..<80:
    print("合格")
case 80...100:
    print("優秀")
default:
    print("スコアが不正です")
}

このコードでは、scoreという整数変数に対して、範囲を指定したswitch文を使用しています。

この例では、scoreの値が0から59の範囲であれば「不合格」、60から79の範囲であれば「合格」、80から100の範囲であれば「優秀」と表示します。

また、どの範囲にも当てはまらない場合は、「スコアが不正です」と表示されます。

このコードを実行すると、「優秀」と表示されます。

○サンプルコード3:タプルを利用したswitch文

Swiftでは、switch文を使用してタプルの値に基づいて条件分岐を行うことができます。

タプルを用いると、複数の変数や値をまとめて扱い、それらの組み合わせに基づいて分岐を行うことが可能となります。

下記のサンプルコードでは、二次元平面上の点の位置を表すタプル(x, y)を使って、その点がどの象限に位置するかを判定するコードを表しています。

この例では、x軸とy軸の正負を考慮して、1から4までの象限を判定しています。

let point = (x: 2, y: -3)

switch point {
case (let x, let y) where x > 0 && y > 0:
    print("第1象限に位置します。")
case (let x, let y) where x < 0 && y > 0:
    print("第2象限に位置します。")
case (let x, let y) where x < 0 && y < 0:
    print("第3象限に位置します。")
case (let x, let y) where x > 0 && y < 0:
    print("第4象限に位置します。")
default:
    print("原点、または軸上に位置します。")
}

上のコードでは、switch文を用いてタプルのpointの値に応じてメッセージを出力しています。

caseの部分でタプルの各要素を変数xyに束縛しており、where句を使用して条件を追加しています。

このコードを実行すると、pointの値に応じて次のように出力されます。

pointが(2, -3)の場合、出力は「第4象限に位置します。」となります。

○サンプルコード4:where句を使った条件の追加

Swiftのswitch文では、where句を使用して、条件を追加することができます。

これにより、より複雑な条件分岐を実現することが可能となります。

下記のサンプルコードでは、整数の配列から偶数のみを抽出して、その偶数が10以上であるかどうかを判定するコードを表しています。

この例では、where句を使用して、条件を追加しています。

let numbers = [3, 12, 5, 8, 21, 10]

for number in numbers {
    switch number {
    case let x where x % 2 == 0 && x >= 10:
        print("\(x)は10以上の偶数です。")
    case let x where x % 2 == 0:
        print("\(x)は偶数です。")
    default:
        print("\(number)は奇数、または10未満の数です。")
    }
}

このコードでは、for-inループを用いて配列の要素を1つずつ取り出し、その値が偶数かつ10以上であるか、偶数であるか、その他の場合かを判定しています。

このコードを実行すると、各数字に応じて次のように出力されます。

12は10以上の偶数であるため、「12は10以上の偶数です。」、8は偶数であるため、「8は偶数です。」、その他の数字については、「数字は奇数、または10未満の数です。」といった形で出力されます。

●Swiftのswitch文の応用例

Swiftのswitch文は非常に強力で柔軟性が高く、多くのシナリオで使用することができます。

その基本的な使い方や書き方から一歩進んだ応用例について解説します。

初心者から上級者まで、Swiftを使ったプログラミングのスキルアップに役立つ内容となっています。

具体的なサンプルコードも交えながら、各機能のポイントや活用方法を詳しく見ていきましょう。

○サンプルコード5:enumを使った例

Swiftのenum(列挙型)は、限定された選択肢を持つデータ型を定義するのに便利です。

このenumとswitch文を組み合わせることで、各ケースに応じた処理を綺麗に書くことができます。

下記のコードでは、季節を表すenumと、それを受け取り適切なメッセージを返す関数を表しています。

enum Season {
    case spring
    case summer
    case autumn
    case winter
}

func describeSeason(season: Season) -> String {
    switch season {
    case .spring:
        return "春は花が咲く季節です。"
    case .summer:
        return "夏は暑く、海やプールが楽しい時期です。"
    case .autumn:
        return "秋は紅葉や収穫の季節です。"
    case .winter:
        return "冬は雪が降り、寒い季節です。"
    }
}

let currentSeason = Season.spring
print(describeSeason(season: currentSeason))

このコードでは、Seasonというenumを使って春、夏、秋、冬の4つの季節を表しています。

describeSeason関数は、引数としてSeason型を受け取り、それに応じた季節の説明を返します。

この例ではcurrentSeasonとして春を指定しており、結果として”春は花が咲く季節です。”というメッセージが出力されます。

○サンプルコード6:関連値を持つenumとの組み合わせ

Swiftのenumは関連値を持つことができます。

これにより、enumの各ケースに関連する情報を持たせることが可能です。

関連値を持つenumとswitch文を組み合わせることで、より複雑なロジックを簡潔に表現することができます。

下記のコードは、交通機関とその速度を表すenumを表しています。

enum Transportation {
    case car(speed: Int)
    case train(speed: Int)
    case airplane(speed: Int)
}

func travelTime(distance: Int, by mode: Transportation) -> Int {
    switch mode {
    case .car(let speed):
        return distance / speed
    case .train(let speed):
        return distance / speed
    case .airplane(let speed):
        return distance / speed
    }
}

let modeOfTransport = Transportation.car(speed: 100)
let time = travelTime(distance: 500, by: modeOfTransport)
print("移動時間は\(time)時間です。")

このコードでは、Transportationというenumで車、電車、飛行機の3つの交通機関とそれぞれの速度(単位:km/h)を表現しています。

travelTime関数は、指定された距離と交通機関に応じて、移動にかかる時間を計算します。

この例では車での移動を指定しており、速度が100km/hで500km移動するのにかかる時間を計算し、結果として”移動時間は5時間です。”というメッセージが出力されます。

○サンプルコード7:switch文を使った計算処理

このコードでは、数値を取得し、それに応じた計算処理をswitch文を使って実行する方法を表しています。

この例では、数値が偶数か奇数かを判定し、その結果を文字列として返す処理を行っています。

func judgeEvenOrOdd(number: Int) -> String {
    switch number % 2 {
    case 0:
        return "偶数です"
    case 1:
        return "奇数です"
    default:
        return "不明なエラー"
    }
}

let result = judgeEvenOrOdd(number: 5)

上のサンプルコードでは、関数judgeEvenOrOddを定義しています。

引数として数値numberを受け取り、この数値が偶数か奇数かを判定して、結果を文字列として返します。

number % 2という式は、数値を2で割った余りを計算します。

その結果が0ならば偶数、1ならば奇数として、それぞれのcaseブロック内の処理が実行されます。

ここで、default節を使用する理由は、理論的には余りが0か1のどちらかになるため不要ですが、安全性を確保するために追加しています。

このコードを実行すると、judgeEvenOrOdd(number: 5)5という数値を引数に取り、その結果として”奇数です”という文字列を返します。

したがって、変数resultには”奇数です”という文字列が格納されます。

○サンプルコード8:switch文とfor-inループの組み合わせ

このコードでは、for-inループを使用して、複数の数値を一つずつ取得し、その都度switch文で計算処理を行う方法を表しています。

この例では、1から5までの数値が偶数か奇数かを判定し、その結果を出力する処理を行っています。

for number in 1...5 {
    switch number % 2 {
    case 0:
        print("\(number)は偶数です")
    case 1:
        print("\(number)は奇数です")
    default:
        print("不明なエラー")
    }
}

このコードを実行すると、1から5までの数値を一つずつ取り出して、それが偶数か奇数かを判定します。

そして、その結果を”数字は偶数です”や”数字は奇数です”という形式で出力します。

具体的な実行結果としては、次のように表示されます。

1は奇数です
2は偶数です
3は奇数です
4は偶数です
5は奇数です

○サンプルコード9:関数の戻り値としてのswitch文

Swiftでは、関数の戻り値としてswitch文を使用することができます。

これにより、関数の返り値を動的に変更することができ、より柔軟なコードの実装が可能となります。

具体的な使用方法をサンプルコードで確認しましょう。

func judgeGrade(score: Int) -> String {
    switch score {
    case 90...100:
        return "優"
    case 80..<90:
        return "良"
    case 70..<80:
        return "可"
    default:
        return "不可"
    }
}

let result = judgeGrade(score: 85)
print(result)  // 出力: 良

このコードでは、judgeGradeという関数を定義しています。

関数の引数として受け取ったscoreの値に応じて、評価をString型で返しています。

この例では、85というスコアを関数に渡しているので、”良”という文字列が出力されます。

こうした方法で、関数の戻り値としてswitch文を使用することで、異なる条件に基づいて異なる結果を返すことが可能になります。

さらに、この概念を応用して、エラーハンドリングにも使用することができます。

○サンプルコード10:switch文を使ったエラーハンドリング

Swiftにおいて、エラーのハンドリングは非常に重要です。

switch文を活用することで、エラーの種類に応じた適切な処理を行うことができます。

ここでは、switch文を使ったエラーハンドリングのサンプルコードを紹介します。

enum NetworkError: Error {
    case invalidURL
    case timeout
    case unknown
}

func fetchResource(from url: String) throws -> String {
    // ここで通常のネットワーク処理を行うと想定
    if url == "invalid" {
        throw NetworkError.invalidURL
    } else if url == "timeout" {
        throw NetworkError.timeout
    } else {
        return "Resource content"
    }
}

do {
    let result = try fetchResource(from: "invalid")
    print(result)
} catch {
    switch error {
    case NetworkError.invalidURL:
        print("無効なURLです。")
    case NetworkError.timeout:
        print("タイムアウトが発生しました。")
    default:
        print("不明なエラーが発生しました。")
    }
}

このコードでは、NetworkErrorというエラーの列挙型を定義しています。

そして、fetchResourceという関数内でエラーを投げる処理を行っています。

do-catch文を使用してエラーをハンドリングしており、catch節内でエラーの種類に応じてswitch文で適切なメッセージを表示しています。

このように、switch文を利用してエラーハンドリングを行うことで、エラーの種類ごとに適切な処理やメッセージを出力することが容易になります。

○サンプルコード11:オプショナルバインディングとの組み合わせ

Swiftでは、変数や定数に値が存在するかどうかをオプショナル型で扱います。

switch文とオプショナルバインディングを組み合わせることで、オプショナルの値の有無や内容に応じた処理を簡潔に書くことができます。

下記のコードでは、オプショナル型の整数numberをswitch文とオプショナルバインディングを使って処理しています。

このコードでは、numbernilでない場合にはその値を取り出し、nilの場合には”値がありません”と表示しています。

let number: Int? = 5

switch number {
case let value?:
    print("数値は\(value)です。")
case nil:
    print("値がありません。")
}

上記のコードでは、value?を使用することでオプショナルの値が存在する場合にその値をvalueという定数にバインドしています。

この方法を利用することで、条件の中で直接オプショナルの中身を利用することができます。

このコードを実行すると、”数値は5です。”と表示されます。もしnumbernilであれば、”値がありません。”と表示されるでしょう。

○サンプルコード12:switch文を活用したデザインパターン

switch文は、単に値のマッチングだけでなく、設計パターンの実装にも役立ちます。

下記の例は、状態に応じた処理を表すデザインパターンをswitch文を使って実装したものです。

まず、アプリの状態を表すenum型AppStateを定義します。

enum AppState {
    case loading
    case loaded
    case error(String)
}

次に、現在のアプリの状態を表す変数currentStateを定義し、switch文を使って状態に応じた処理を行います。

let currentState: AppState = .error("ネットワークエラー")

switch currentState {
case .loading:
    print("読み込み中...")
case .loaded:
    print("読み込み完了!")
case .error(let message):
    print("エラー: \(message)")
}

このコードでは、currentState.error("ネットワークエラー")であるため、”エラー: ネットワークエラー”と表示されます。

AppStateに定義された他の状態であれば、それに応じたメッセージが表示されるでしょう。

このように、switch文を使うことで、状態の変化に応じた処理を明確に記述することができます。

特にenum型と組み合わせることで、コードの可読性やメンテナンス性が向上します。

○サンプルコード13:switch文でのパターンマッチングの活用

Swiftのswitch文は、単純な値の比較だけでなく、パターンマッチングという強力な機能も持っています。

パターンマッチングを活用することで、より複雑な条件を簡潔に記述することができます。

enum Vehicle {
    case car(String)
    case bicycle(String)
    case bus(Int)
}

let myVehicle = Vehicle.car("Toyota")

switch myVehicle {
case .car(let brand) where brand == "Toyota":
    print("これはトヨタの車です")
case .bicycle(let type):
    print("\(type)の自転車です")
case .bus(let seatNumber) where seatNumber > 40:
    print("大型バスです")
default:
    print("該当する車両はありません")
}

このコードでは、Vehicleというenumを定義しています。

そして、myVehicleという変数に、Vehicle型のcarという値を持つインスタンスを代入しています。

switch文内のcaseでは、enumの値ごとにマッチさせ、さらにwhere句を使って詳細な条件を指定しています。

実際の出力結果は、「これはトヨタの車です」というメッセージが表示されることになります。

○サンプルコード14:多重のswitch文のネスティング

Swiftのswitch文はネスティングも可能です。

これにより、複数の条件を組み合わせた複雑な分岐を実現することができます。

ここでは、ネスティングを使用したswitch文の一例を紹介します。

let coordinate = (x: 3, y: 5)

switch coordinate {
case (0, 0):
    print("原点にいます")
case (_, 0):
    print("X軸上にいます")
case (0, _):
    print("Y軸上にいます")
case (let x, let y) where x == y:
    print("X軸とY軸の値が同じです")
case (let x, let y):
    switch (x > y, x < y) {
    case (true, false):
        print("X軸の値の方が大きいです")
    case (false, true):
        print("Y軸の値の方が大きいです")
    default:
        break
    }
}

このコードでは、二次元平面上の点の座標を示すタプルcoordinateを用いています。

まず、基本的な位置を示すswitch文を記述しています。

その中で、X軸とY軸の値の大小を判断するためのネスティングされたswitch文を記述しています。

実際の出力結果としては、「X軸の値の方が大きいです」と表示されることになります。

○サンプルコード15:caseの値を変数や定数として取り出す

Swiftのswitch文では、マッチしたcaseの値を変数や定数として取り出すことができます。

これにより、その値を後続の処理で活用することが可能になります。

let item = ("apple", 150)

switch item {
case let (name, price):
    print("商品名:\(name), 価格:\(price)円")
}

このコードでは、タプルitemの中身をswitch文を用いて取り出しています。

具体的には、(name, price)というパターンでマッチさせ、変数namepriceにタプルの要素を束縛しています。

この例では、”apple”と150がそれぞれnamepriceに束縛され、print関数で表示されます。

実行すると、次のような結果が得られます。

商品名:apple, 価格:150円

注意点として、この方法で変数や定数に束縛する場合、case内でのみその値を参照できることを理解しておくと良いでしょう。

○サンプルコード16:複数のcaseに一つの処理をまとめて記述

Swiftのswitch文では、複数のcaseに一つの処理をまとめて記述することができます。

これにより、同じ処理を複数の条件で行いたい場合にコードの重複を避けることができます。

let number = 3

switch number {
case 1, 3, 5, 7, 9:
    print("奇数")
case 2, 4, 6, 8, 10:
    print("偶数")
default:
    print("範囲外")
}

このコードでは、numberという変数の値に応じて、奇数か偶数かを判断しています。

複数のcaseをカンマで区切ることで、一つのcaseブロック内で共通の処理を記述することができます。

この例では、1, 3, 5, 7, 9のいずれかの場合には”奇数”と表示し、2, 4, 6, 8, 10のいずれかの場合には”偶数”と表示します。

実行すると、次のような結果が得られます。

奇数

○サンプルコード17:fallthroughを使った処理の継続

Swiftのswitch文で、あるcaseの処理が終了した後に次のcaseの処理を続けて実行したい場合、fallthroughキーワードを使用することができます。

let character = "a"

switch character {
case "a":
    print("文字はaです。")
    fallthrough
case "b":
    print("また、文字はbです。")
default:
    print("それ以外の文字です。")
}

このコードでは、characterという変数の値が”a”の場合、最初のcaseの処理が実行されます。

その後、fallthroughによって次のcaseの処理も実行されるようになっています。

この例では、”文字はaです。”と表示された後に”また、文字はbです。”という出力も行われます。

実行すると、次のような結果が得られます。

文字はaです。
また、文字はbです。

●注意点と対処法

Swiftでのswitch文を使用する際には、いくつかの注意点が存在します。

ここでは、その注意点と、それに関連する対処法を詳しく解説していきます。

○breakを忘れずに

Swiftのswitch文は、他の多くのプログラミング言語とは異なり、caseがマッチした際に自動で処理が終了します。

つまり、break文を明示的に書く必要はありません。

しかし、他の言語の経験者であれば、break文を書く習慣が身についているかもしれません。

Swiftではbreak文を使うことで、そのcaseの処理を明示的に終了させることができます。

ただし、不要な場面でのbreak文の使用は冗長となるため、適切に使用することが重要です。

このコードでは、switch文を使用して整数の値を判定しています。

この例では、各casebreakを使用せず、マッチしたcaseの処理が自動で終了しています。

let number = 3

switch number {
case 1:
    print("One")
case 2:
    print("Two")
case 3:
    print("Three")
default:
    print("Other number")
}

上記のコードを実行すると、「Three」と表示されます。

○default節の重要性

switch文を使用する際、考慮していない値が入力された場合の処理を記述するために、default節を使用します。

Swiftでは、すべての可能性を網羅することが求められるため、default節の使用は非常に重要です。

もし、default節を省略してすべての値を網羅していないswitch文を書いた場合、コンパイルエラーとなります。

このコードでは、1から3の整数を判定するswitch文を表しています。

この例では、1〜3以外の値が入力された場合の処理として、default節を用いています。

let number = 5

switch number {
case 1, 2, 3:
    print("Number is between 1 and 3")
default:
    print("Number is out of range")
}

上記のコードを実行すると、「Number is out of range」と表示されます。

○条件の重複を避ける

switch文を記述する際、複数のcase節で同じ条件を書くと、コンパイルエラーが発生します。

したがって、それぞれのcase節での条件は、重複しないように気をつける必要があります。

このコードでは、整数の値を判定するswitch文を表しており、条件の重複によるコンパイルエラーの例を表しています。

let number = 2

// This will cause a compile error due to duplicate conditions
switch number {
case 1:
    print("One")
case 2:
    print("Two")
case 2:
    print("Two again")
default:
    print("Other number")
}

上記のコードはコンパイルエラーとなるため、正しく実行することはできません。

このような場合、重複する条件を削除するか、条件を変更してエラーを回避します。

●カスタマイズ方法

Swiftのswitch文は、他のプログラム言語と比較しても高機能であり、そのカスタマイズの方法も多岐にわたります。

特に、Swiftは読みやすさや安全性を重視した言語であるため、switch文もそれに応じたカスタマイズが可能です。

ここでは、switch文のスタイルや整形、独自のマッチングロジックの追加方法について詳しく説明します。

○switch文のスタイルや整形

Swiftのswitch文を読みやすくするために、スタイルや整形の方法をカスタマイズすることができます。

例えば、一般的にはswitch文は次のように書かれることが多いです。

switch 変数 {
case 値1:
    処理1
case 値2:
    処理2
default:
    その他の処理
}

このコードでは、変数が値1の時に処理1を、値2の時に処理2を、それ以外の場合にはその他の処理を行います。

ただ、場合によっては、caseと処理を一行で記述することで、コードの見た目をすっきりとさせることもできます。

switch 変数 {
case 値1: 処理1
case 値2: 処理2
default: その他の処理
}

この例では、caseとその後の処理が一行で書かれているため、コードが簡潔になります。

どちらのスタイルが良いかは、チームやプロジェクトのルールによるため、一概には言えませんが、どちらのスタイルも正式にサポートされているため、自分の好みやチームのルールに合わせてカスタマイズすることができます。

○独自のマッチングロジックの追加

Swiftのswitch文では、標準的なマッチングロジック以外にも、独自のロジックを追加することが可能です。

これは、where句を使用することで実現できます。

例えば、次のようなコードを考えてみましょう。

let point = (x: 3, y: 4)

switch point {
case (let x, let y) where x == y:
    print("XとYは等しい")
case (let x, let y) where x > y:
    print("XはYより大きい")
default:
    print("それ以外の場合")
}

このコードでは、タプルのxとyが等しい場合、XはYより大きい場合など、独自のマッチングロジックを追加しています。

このように、where句を使用することで、標準的なマッチングロジック以外の条件を追加することができます。

これにより、switch文の柔軟性が向上し、さまざまな条件を簡潔に表現することができるようになります。

この例の実行結果としては、”それ以外の場合”という結果が得られます。

なぜなら、pointのxとyは等しくなく、xがyよりも大きくもないため、defaultの処理が実行されるからです。

まとめ

Swiftのswitch文は非常に柔軟で、多岐にわたる条件分岐を簡潔に表現することができます。

基本的な使い方から、独自のマッチングロジックの追加まで、さまざまなカスタマイズ方法を活用することで、コードの可読性や効率性を向上させることができます。

特にwhere句を用いることで、より詳細な条件を追加し、複雑な条件分岐も簡潔に表現することが可能です。

Swiftを使用する際は、switch文の豊富な機能を最大限に活用して、効率的なプログラミングを心がけましょう。