web-dev-qa-db-fra.com

Comment utiliser NSURLConnection completionHandler avec swift

Est-ce que quelqu'un sait comment les handlers (blocs) fonctionnent rapidement? J'essaie de faire fonctionner ce code mais je ne trouve aucune documentation sur la syntaxe correcte pour le completionHandler.

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

Comme ça:

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

Ou variante plus verbeuse.

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

sendAsynchronousRequest est obsolète dans les nouvelles versions de Swift. Déplacer vers dataTaskWithRequest, heureusement, il est utilisé à peu près de la même manière

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

Vous devez utiliser ce code:

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

Pour plus d'informations, vous pouvez vous référer à this tutorial, ou consulter les réponses à Comment analyser un fichier JSON de manière rapide? .

3
Bluewings

Le bon terme que vous recherchez ici estFermeture. Les fermetures dans Swift sont similaires aux blocs en C et en Objective-C. En plus de la réponse de Tomáš, il existe une autre version courte pour utiliser le gestionnaire d'achèvement ici:

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

Ici, j'ai utilisé Noms abrégés d'arguments. J'accède à réponse en tant que $ 0 , data en tant que $ 1 et error en tant que $ 3 . Je trouve cette syntaxe plus facile à lire et à écrire, sauf si les paramètres sont nombreux, sinon le code deviendrait illisible. 

0
Evol Gate