2017-04-08 1 views
0

Ich habe ein Protokoll, das zwei Funktionen successWeather und errorWeather enthält. Wenn der Statuscode etwas anderes als 200-299 zurückgibt, möchte ich, dass die errorWeather-Funktion ausgelöst wird.Fehler in Guard-Anweisung erzwingen?

Meine Frage ist: Wie kann ich einen Fehler erzwingen, wenn der Wächter den Statuscode fängt? Ab sofort gibt der Fehler null zurück.

func errorWeather(error: NSError)

let task = URLSession.shared.dataTask(with: request) { (data, response, error) -> Void in 
     if let error = error { 
      self.delegate.errorWeather(error: error as! NSError) 
     } 

     guard let statusCode = (response as? HTTPURLResponse)?.statusCode, statusCode >= 200 && statusCode <= 299 else { 
      print("Your request returned a status code other than 2xx!") 
      //How can I force an error? 
      return 
     } 
+0

Es ist irgendwie unklar - zumindest für mich, was ist die Beziehung zwischen dem Protokoll und der Throwable-Funktion? Könntest du es ausarbeiten? –

+0

Ich habe es im Grunde als ein Delegiertensystem erstellt, um die API zu verwenden. In einer detailView entspricht es dem Protokoll und muss successWeather und errorWeather verwenden. @AhmadF – Casey

+0

Also, -wenn ich es richtig gemacht habe- was ist der Zweck der Implementierung sowohl Delegate und Throwable-Funktion? Ich schlage vor, es nur eine Option zu sein, um den Fehler zu behandeln. Ist das Problem, wie Sie die delegierte oder die throwable-Funktion implementieren sollten? Möglicherweise möchten Sie auch [diese Q & A] (http://stackoverflow.com/questions/40501780/example-of-delegates-in-swift-3/40503024#40503024) überprüfen. –

Antwort

1

Ein NSError Objekt verkapselt in einer ausfahrbaren, objektorientierten Art und Weise Informationen über eine Fehlerbedingung. Es besteht aus einer vordefinierten Fehlerdomäne, einem domänenspezifischen Fehlercode und einem Benutzerinformationswörterbuch mit anwendungsspezifischen Informationen. mehr zu überprüfen Apple Doc

guard let statusCode = (response as? HTTPURLResponse)?.statusCode, statusCode >= 200 && statusCode <= 299 else { 
       print("Your request returned a status code other than 2xx!") 
       //How can I force an error? 
       let error = NSError(domain: "statusCode", 
           code: (response as? HTTPURLResponse)?.statusCode, 
          userInfo: [NSLocalizedDescriptionKey: "Your request returned a status code other than 2xx!"]) 

        self.delegate.errorWeather(error: error) 
       return 
      } 
+1

Super! Genau das habe ich gesucht. Danke für das Verknüpfen der Dokumentation! – Casey

+1

Es ist mir ein Vergnügen, Kumpel –