Comment puis-je obtenir le message d'erreur dans Swift 2.0?
J'ai beaucoup utilisé cette méthode dans Swift 1.2: NSURLConnection.sendSynchronousRequest(:_:_:_)
mais ceci est apparemment déprécié dans iOS9. Il fonctionne cependant toujours, mais maintenant il utilise la nouvelle gestion D'erreurs Swift 2.0 et je ne sais pas comment j'obtiendrai le message d'erreur si celui-ci échoue, par exemple. si le temps s'épuise.
je sais que je dois le mettre dans un do-catch et puis dire essayer avant le metho mais je ne sais pas comment attraper le message d'erreur.
do {
let data = try NSURLConnection.sendSynchronousRequest(request, returningResponse: nil)
return data
}
catch _ {
return nil
}
avant J'utilisais NSError et puis sa propriété de description, mais maintenant je n'en avons aucune idée.
3 réponses
automatique error
variable, et vous pouvez le convertir en NSError
si vous le souhaitez:
catch {
let nsError = error as NSError
print(nsError.localizedDescription)
}
vous pouvez maintenant lancer tout objet en héritage ErrorType
, et de fournir une gestion personnalisée dans le catch
phrase. Vous pouvez aussi jeter l'erreur NSError
pour accéder à localizedDescription
pour le traitement des erreurs de tiers.
Casting d'un enum ErrorType
va produire un NSError
domain
égale au nom enum,code
égale à la valeur enum et unlocalizedDescription
avec le format suivant:
l'opération n'a pas pu être terminée. (Erreur de domaine CODE.)
Par exemple, le code suivant:
enum AwfulError: ErrorType {
case Bad
case Worse
case Terrible
}
func throwingFunction() throws {
throw AwfulError.Worse
}
do {
try throwingFunction()
}
catch AwfulError.Bad {
print("Bad error")
}
catch let error as NSError {
print(error.localizedDescription)
}
l'opération n'a pas pu être terminée. (Erreur d'AwfulError 1.)
malgré le titre de la question précisant Swift 2, cette réponse est pour Swift 3.
// Method to print an unknown Error type object to the system output.
static func printCaughtError(_ unknownError : Error) {
let objectDescription = String(describing: unknownError)
let localizedDescription = unknownError.localizedDescription
if localizedDescription != "" {
if localizedDescription.contains(objectDescription) {
print(localizedDescription)
return
}
if !objectDescription.contains(localizedDescription) {
print(objectDescription + ": " + localizedDescription)
return
}
}
print(objectDescription)
}
Ensuite, vous pouvez l'appeler comme ceci:
catch {
printCaughtError(error)
}