functions block nsurlconnection swift

block - functions - swift 4 handler



Cómo usar NSURLConnection completedHandler con swift (4)

El término correcto que está buscando aquí es Cierre . Los cierres en Swift son similares a los bloques en C y Objective-C. Además de la respuesta de Tomáš, hay otra versión corta para usar el controlador de finalización aquí:

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

Aquí he utilizado nombres de argumentos de taquigrafía . Estoy accediendo a la respuesta como $ 0 , los datos como $ 1 y el error como $ 3 . Considero que esta sintaxis es más fácil de leer y escribir a menos que los parámetros sean grandes en número, de lo contrario, el código será ilegible.

¿Alguien sabe cómo funcionan los manejadores (bloques) en swift? Estoy tratando de hacer funcionar este código pero no puedo encontrar ninguna documentación de la sintaxis correcta para completarHandler.

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)!)


Me gusta esto:

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

O variante más verbosa.

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


Necesitas usar este código:

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

Para obtener más información, puede consultar this tutorial o consultar las respuestas en ¿Cómo analizar un archivo JSON de forma rápida? .


sendAsynchronousRequest ha quedado en desuso en las versiones más recientes de Swift. Mover a dataTaskWithRequest , afortunadamente se usa de la misma manera

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()