エラー付きのアラートの使い方【.alert】

この記事は約5分で読めます。
  • iOS:15.0以上
  • XCode(当サイトの環境):15.0.1

alertにLocalizedErrorに適合したエラーを表示させることが出来ます。

パラメータ

  • isPresented:アラートを表示するかどうかを決定するブール値へのバインディング
  • actions:アラートのアクションを返す
  • message:アラートに表示するメッセージ
  • error:システムは内容をモディファイアのクロージャにLocalizedErrorに適合したデータを受け渡せる

タイトルはなく、errorDescriptionの内容がアラートのタイトルとして表示されます。

サンプルコード

サンプルコードのポイント:.alertのパラメータerrorに受け渡すためのLocalizedErrorを定義しておく必要があります。

import SwiftUI

struct ErrAlertSmp: View {
    @State private var error: ErrAlertType? = nil
    @State private var showAlert = false
    
    var body: some View {
        // ボタンを押すとエラーを格納する
        VStack {
            Button("Aボタン") {
                showAlert = true
                error = .ErrorA
            }
            Button("Bボタン") {
                showAlert = true
                error = .ErrorB
            }
        }
        .alert(
            isPresented: $showAlert,
            error: error
            
        ) { error in
            // actionを記述
        } message: { error in
            // エラーの発生理由を表示する
            Text(error.failureReason ?? "Try again later.")
        }
        
        Button("エラークリア") {
            error = nil
        }
    }
}

enum ErrAlertType: LocalizedError {
    // エラーの一覧を定義
    case ErrorA
    case ErrorB
    
    // エラーの説明
    public var errorDescription: String? {
        switch self {
        case .ErrorA:
            return NSLocalizedString("エラーA", comment: "")
        case .ErrorB:
            return NSLocalizedString("エラーB", comment: "")
        }
    }
    // エラーの発生理由
    public var failureReason: String? {
        switch self {
        case .ErrorA:
            return NSLocalizedString("Aボタンを押しました", comment: "")
        case .ErrorB:
            return NSLocalizedString("Bボタンを押しました", comment: "")
        }
    }
    // エラーからの復帰方法
    public var recoverySuggestion: String? {
        switch self {
        case .ErrorA:
            return NSLocalizedString("エラークリアボタンを押してください", comment: "")
        case .ErrorB:
            return NSLocalizedString("エラークリアボタンを押してください", comment: "")
        }
    }
}

サンプルコードを実行した時のアラート

LocalizedErrorアラート

今回の例ではアラートのタイトルにerrorDescriptionアラートのメッセージとして、failureReasonを表示させています。

まとめ

本記事ではアラートにLocalizedErrorを適用する方法を紹介しました。この方法を使うとアラートを表示させる時に事前に定義済みのエラーを用いたりすることも可能です。

タイトルとURLをコピーしました