2016-10-02 1 views
2

fand ich diese tolle Antwort auf posting data to phpCompletion-Handler für Post-Server

Das einzige Problem ist, ich weiß nicht, wie die Daten nach Abschluss zurückzukehren.

Wie kann ich einen Beendigungshandler für die folgende Funktion erstellen?

func postToServer(postURL: String, postString: String) { 
    let request = NSMutableURLRequest(URL: NSURL(string: postURL)!) 
    request.HTTPMethod = "POST" 
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ 
     data, response, error in 

     let responseString = String(data: data!, encoding: NSUTF8StringEncoding) 
     if responseString != nil { 
      print("responseString = \(responseString!)") 
     } 

    } 
    task.resume() 
} 

Edit: Vielleicht habe ich es nicht richtig anwenden, aber die vorgeschlagene doppelte Verknüpfung hat mein Problem nicht gelöst. Könnte jemand bitte ein Beispiel dafür geben? Ich bin jetzt seit ungefähr 3 Wochen dabei. Ich weiß einfach nicht, wie man die Daten aus der Aufgabe zieht, wenn sie fertig ist. Ich habe viel über Verschlusssachen gelesen, aber ich sehe einfach nicht, wo oder wie diese miteinander verwandt sind. Wenn ich versuche, Funktionen zu finden, die sich auf Aufgabe beziehen, gibt es nur Antwort ... und das gibt nil zurück, wenn ich sleep(3) nach dem Fortsetzen nicht eintippe.

Ich habe eine Reihe von Videos angeschaut, wo Leute den gleichen Code wie ich haben und keinen Completion-Handler benutzen und trotzdem Daten zurückbekommen ... was gibt's?

+0

Mögliche Duplikat [Wie kann ich eine Funktion mit einem Abschluss-Handler in Swift erstellen?] (Http://stackoverflow.com/questions/30401439/how-could- i-create-a-function-with-a-completion-handler-in-swift) –

+1

Sie rufen eine asynchrone Methode auf. Wenn Sie also Daten zurückgeben möchten, muss Ihre Funktion auch einen Beendigungshandler als Argument enthalten. Wenn Sie NSURL synchron verwenden möchten, gibt es eine Erweiterung, die genau das tut. http://stackoverflow.com/questions/26784315/can-i-somehow-do-asynchronous-http-request-via-nsurlsession-in-swift – Sealos

+0

Können Sie bitte erklären, was Sie tatsächlich versuchen, zu erreichen ? was willst du mit dem 'responseString' machen? –

Antwort

2

Dies swift arbeitet 3

func postToServer(_ completion:@escaping ((_ response: String, _ success: Bool)-> Void), postURL: String, postString: String) { 
    let request = NSMutableURLRequest(url: NSURL(string: postURL)! as URL) 
    request.httpMethod = "POST" 
    request.httpBody = postString.data(using: String.Encoding.utf8) 

    let task = URLSession.shared.dataTask(with: request as URLRequest){ 
     data, response, error in 

     let responseString = String(data: data!, encoding: String.Encoding.utf8) 
     if responseString != nil { 
      print("responseString = \(responseString!)") 
      completion(responseString!, true) 

     } 

    } 
    task.resume() 
    } 
} 
+1

Super! Danke Mat! –

Verwandte Themen