[解決済み]SwiftでErrorタイプでローカライズされた説明を提供する方法は?
2022-04-15 01:25:35
質問
Swift 3 の構文でカスタムエラータイプを定義しています。
localizedDescription
プロパティの
Error
オブジェクトを作成します。どうすればいいのでしょうか?
public enum MyError: Error {
case customError
var localizedDescription: String {
switch self {
case .customError:
return NSLocalizedString("A user-friendly description of the error.", comment: "My error")
}
}
}
let error: Error = MyError.customError
error.localizedDescription
// "The operation couldn’t be completed. (MyError error 0.)"
の方法はありますか?
localizedDescription
は、私のカスタムエラー説明 ("エラーのユーザーフレンドリーな説明.") を返すのでしょうか?ここでのエラーオブジェクトの型は
Error
であって
MyError
. もちろん、このオブジェクトを MyError にキャストすることは可能です。
(error as? MyError)?.localizedDescription
しかし、私のエラータイプにキャストすることなく動作させる方法はあるのでしょうか?
どのように解決するのですか?
Xcode 8 beta 6 リリースノートに記載されているとおりです。
Swift で定義されたエラータイプは、新しい LocalizedError プロトコルを採用することで、ローカライズされたエラー説明を提供することができます。
あなたの場合
public enum MyError: Error {
case customError
}
extension MyError: LocalizedError {
public var errorDescription: String? {
switch self {
case .customError:
return NSLocalizedString("A user-friendly description of the error.", comment: "My error")
}
}
}
let error: Error = MyError.customError
print(error.localizedDescription) // A user-friendly description of the error.
エラーが変換された場合、さらに多くの情報を提供することができます。
を
NSError
(これは常に可能です)。
extension MyError : LocalizedError {
public var errorDescription: String? {
switch self {
case .customError:
return NSLocalizedString("I failed.", comment: "")
}
}
public var failureReason: String? {
switch self {
case .customError:
return NSLocalizedString("I don't know why.", comment: "")
}
}
public var recoverySuggestion: String? {
switch self {
case .customError:
return NSLocalizedString("Switch it off and on again.", comment: "")
}
}
}
let error = MyError.customError as NSError
print(error.localizedDescription) // I failed.
print(error.localizedFailureReason) // Optional("I don\'t know why.")
print(error.localizedRecoverySuggestion) // Optional("Switch it off and on again.")
を採用することで
CustomNSError
プロトコルは、エラーが
a
userInfo
ディクショナリ(また
domain
と
code
). 例
extension MyError: CustomNSError {
public static var errorDomain: String {
return "myDomain"
}
public var errorCode: Int {
switch self {
case .customError:
return 999
}
}
public var errorUserInfo: [String : Any] {
switch self {
case .customError:
return [ "line": 13]
}
}
}
let error = MyError.customError as NSError
if let line = error.userInfo["line"] as? Int {
print("Error in line", line) // Error in line 13
}
print(error.code) // 999
print(error.domain) // myDomain
関連
-
[解決済み] これを解決するにはどうしたらいいのでしょうか。UILabel.textは、メインスレッドからのみ使用する必要があります。
-
[解決済み] Swift言語におけるエクスクラメーションマークの意味とは?
-
[解決済み] SwiftはPass By ValueかPass By Referenceか
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] Swiftの精密文字列フォーマット指定子
-
[解決済み] テキストファイルからの文字列の読み込みと書き込み
-
[解決済み】Swiftでオブジェクトが与えられた型かどうかを確認する
-
[解決済み】Swiftで型付き配列を拡張するにはどうすればいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Swift presentViewController
-
[解決済み] Fatal error.とは何ですか?Unexpectedly found nil while unwrapping an Optional value" とはどういう意味ですか?
-
[解決済み] swiftの"? "の意味は何ですか?[重複している]。
-
[解決済み] 純粋な」Swift で弱いプロトコル参照を作るには (@objc なしで) どうしたらいいですか?
-
[解決済み] Swiftで乱数を生成する方法とは?
-
[解決済み】Swift - StringをDoubleに変換する方法
-
[解決済み】Swiftの構造体のために、メンバーごとの初期化子をデフォルトで公開するにはどうすればよいですか?
-
[解決済み】SwiftでFloatをIntに変換する。
-
[解決済み】Xcode 8 Beta 3 Legacy Swiftを使用する問題
-
[解決済み] Swiftでカスタムメッセージを持つエラー/例外をスローする最も簡単な方法?