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: "")
}
}
}サンプルコードを実行した時のアラート

今回の例ではアラートのタイトルにerrorDescription、アラートのメッセージとして、failureReasonを表示させています。
まとめ
本記事ではアラートにLocalizedErrorを適用する方法を紹介しました。この方法を使うとアラートを表示させる時に事前に定義済みのエラーを用いたりすることも可能です。

