0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SwiftでEnumとSwitchを使って条件分岐をシンプルに!〜フルーツとエラーコードの実用例〜

Posted at

概要

現場のリーダーからSwiftのenumとswitchは、条件分岐をシンプルかつわかりやすく記述するのに最適なツールだからしっかり使おう!との指摘がいただいたので今回は、果物の種類(半分ネタ)を処理する場合と、エラーコードを処理(半分本気)する場合の2つのシチュエーションに焦点を当てて、それぞれの実用例を紹介します。

フルーツコードをenumで処理し、対応する名前を返す。
エラーコードをenumで処理し、対応するエラーメッセージを返す。
これにより、条件分岐が複雑になりがちな場面でも、enumとswitchを使ってシンプルに記述できるようになります。

1. フルーツコードを処理する

コード例
フルーツのコード値を受け取り、それに応じた果物の名前を返す例です。

import Foundation

// 果物の種類を表すenum
enum Fruit: Int {
    case apple = 1
    case banana = 2
    case orange = 3
    case unknown // 該当しない場合
}

// 整数からenumに変換する関数
func convertToEnum(from code: Int) -> Fruit {
    return Fruit(rawValue: code) ?? .unknown
}

// enumに基づいて果物の名前を返す関数
func getFruitName(from code: Int) -> String {
    let fruitEnum = convertToEnum(from: code)

    switch fruitEnum {
    case .apple:
        return "This is an Apple."
    case .banana:
        return "This is a Banana."
    case .orange:
        return "This is an Orange."
    case .unknown:
        return "Unknown fruit."
    }
}

// 使用例
let fruit1 = getFruitName(from: 1)  // "This is an Apple."
let fruit2 = getFruitName(from: 2)  // "This is a Banana."
let fruit3 = getFruitName(from: 3)  // "This is an Orange."
let fruit4 = getFruitName(from: 99) // "Unknown fruit."

print(fruit1)
print(fruit2)
print(fruit3)
print(fruit4)

実行結果

This is an Apple.
This is a Banana.
This is an Orange.
Unknown fruit.

このコードでは、フルーツのコードを整数で受け取り、enumに変換してからswitchで分岐しています。対応する果物があればその名前を返し、該当する果物がない場合は「Unknown fruit」を返します。

2. エラーコードを処理する

コード例
エラーコードを受け取り、それに応じたエラーメッセージを返す例です。

import Foundation

// エラーコードを表すenum
enum ErrorCode: Int {
    case notFound = 404
    case unauthorized = 401
    case serverError = 500
    case unknown // 該当しない場合
}

// 整数からErrorCodeに変換する関数
func convertToErrorCode(from code: Int) -> ErrorCode {
    return ErrorCode(rawValue: code) ?? .unknown
}

// ErrorCodeに基づいてエラーメッセージを返す関数
func getErrorMessage(from code: Int) -> String {
    let error = convertToErrorCode(from: code)

    switch error {
    case .notFound:
        return "Error 404: Resource not found."
    case .unauthorized:
        return "Error 401: Unauthorized access."
    case .serverError:
        return "Error 500: Internal server error."
    case .unknown:
        return "Unknown error."
    }
}

// 使用例
let errorMessage1 = getErrorMessage(from: 404)  // "Error 404: Resource not found."
let errorMessage2 = getErrorMessage(from: 401)  // "Error 401: Unauthorized access."
let errorMessage3 = getErrorMessage(from: 500)  // "Error 500: Internal server error."
let errorMessage4 = getErrorMessage(from: 999)  // "Unknown error."

print(errorMessage1)
print(errorMessage2)
print(errorMessage3)
print(errorMessage4)

実行結果

Error 404: Resource not found.
Error 401: Unauthorized access.
Error 500: Internal server error.
Unknown error.

このコードでは、エラーコードを整数で受け取り、enumに変換してからswitchで分岐しています。対応するエラーコードがあればそれに応じたエラーメッセージを返し、該当しない場合は「Unknown error」を返します。

まとめ
enumとswitchを組み合わせることで、複雑な条件分岐をシンプルかつわかりやすく表現できます。今回紹介したフルーツのコード処理やエラーコードの処理のように、数値データを扱う際にenumを活用することで、可読性が高く、保守性の良いコードを書くことが可能です。

実際のアプリケーションでも、状態管理やエラーハンドリングでenumとswitchをうまく活用し、効率的なコードを目指しましょう!

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?