wake-up-neo.com

Verwendung von NSURLConnection CompletionHandler mit Swift

Weiß jemand, wie Handler (Blöcke) schnell funktionieren? Ich versuche, diesen Code zum Laufen zu bringen, aber ich kann keine Dokumentation der richtigen Syntax für den completionHandler finden.

let url:NSURL = NSURL(string:"some url")
let request:NSURLRequest = NSURLRequest(URL:url)
let queue:NSOperationQueue = NSOperationQueue()

NSURLConnection.sendAsynchronousRequest(request:request, queue:queue, completionHandler handler:((NSURLResponse!, NSData!, NSError!) -> Void)!)
17
loopmasta

So was:

NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ response, data, error in /* Your code */ })

Oder mehr verbose Variante.

NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
    /* Your code */
})
41
Tomáš Linhart

sendAsynchronousRequest wurde in neueren Versionen von Swift nicht mehr unterstützt. Wechseln Sie zu dataTaskWithRequest, zum Glück wird es fast genauso verwendet

let request:NSURLRequest = NSURLRequest(URL:NSURL(string:"http://YOUR_DESIRED_URL.com")!)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)

let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in

});

task.resume()
3
ColossalChris

Sie müssen diesen Code verwenden:

NSURLConnection.sendAsynchronousRequest(request,queue:queue,completionHandler:{response,data,error in /* code goes here */ })

Für weitere Informationen können Sie sich auf this tutorial beziehen oder die Antworten auf prüfen, um eine JSON-Datei schnell zu analysieren. .

3
Bluewings

Der richtige Begriff, den Sie hier suchen, istClosure. Verschlüsse in Swift ähneln den Blöcken in C und Objective-C. Neben Tomášs Antwort gibt es noch eine weitere kurze Version, um den Completion-Handler hier zu verwenden:

NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler: {$0; $1; $2})

Hier habe ich Shorthand-Argumentnamen verwendet. Ich greife auf response als $ 0 , data als $ 1 und error als $ 3 zu. Ich finde diese Syntax leichter zu lesen und zu schreiben, es sei denn, die Parameter sind groß, sonst wird der Code unlesbar. 

0
Evol Gate