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)!)
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 */
})
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()
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? .
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.