概要
現場のリーダーから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をうまく活用し、効率的なコードを目指しましょう!