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.

19
demandé sur Arbitur 2015-09-24 12:45:38

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)
}
36
répondu rshev 2015-09-24 09:49:17

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 NSErrordomain é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)
}

print

l'opération n'a pas pu être terminée. (Erreur d'AwfulError 1.)

4
répondu redent84 2015-09-24 09:58:47

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)
    }
0
répondu RenniePet 2017-01-06 01:43:11