Ich definiere einen benutzerdefinierten Fehlertyp mit Swift 3-Syntax und möchte eine benutzerfreundliche Beschreibung des Fehlers bereitstellen, der von der localizedDescription
Eigenschaft des Error
Objekts zurückgegeben wird. Wie kann ich es tun?
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.)"
Gibt es eine Möglichkeit localizedDescription
, meine benutzerdefinierte Fehlerbeschreibung zurückzugeben ("Eine benutzerfreundliche Beschreibung des Fehlers.")? Beachten Sie, dass das Fehlerobjekt hier vom Typ ist Error
und nicht MyError
. Ich kann das Objekt natürlich in MyError umwandeln
(error as? MyError)?.localizedDescription
Aber gibt es eine Möglichkeit, es zum Laufen zu bringen, ohne auf meinen Fehlertyp umzusteigen?
quelle
MyError
eineError
erste machen und sieLocalizedError
später erweitern? Gibt es einen Unterschied, ob Sie es überhaupt geschafftLocalizedError
haben?var errorDescription: String?
anstatt zu tippenString
. Es gibt einen Fehler in der Implementierung von LocalizedError. Siehe SR-5858 .Ich würde auch hinzufügen, wenn Ihr Fehler solche Parameter hat
Sie können diese Parameter in Ihrer lokalisierten Beschreibung folgendermaßen aufrufen:
Sie können dies sogar so kürzer machen:
quelle
Es gibt jetzt zwei fehlerübergreifende Protokolle, die Ihr Fehlertyp übernehmen kann, um Objective-C zusätzliche Informationen bereitzustellen - LocalizedError und CustomNSError. Hier ist ein Beispielfehler, der beide übernimmt:
quelle
Die Verwendung einer Struktur kann eine Alternative sein. Ein bisschen Eleganz mit statischer Lokalisierung:
quelle
Hier ist eine elegantere Lösung:
quelle
"Bad entry in file – Argument is not a literal string"
Beim AusführenexportLocalizations
odergenstrings
Erstellen einer Liste mit übersetzbarem Text wird ein Fehler angezeigt.switch + case
nur Option ...