How to use NSURLConnection completionHandler with swift

前端 未结 4 1909
感动是毒
感动是毒 2020-12-25 14:33

Does anybody know how handlers (blocks) work in swift? I am trying to get this code running but i can\'t find any documentation of the right syntax for the completionHandler

相关标签:
4条回答
  • 2020-12-25 15:07

    The right term you are looking for here is Closure. Closures in Swift are similar to blocks in C and Objective-C. In addition to Tomáš's answer there is another short version to use the completion handler here:

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

    Here I have used Shorthand Argument Names. I am accessing response as $0, data as $1 and error as $3. I find this syntax more easy to read and write unless the parameters are large in number otherwise the code will become unreadable.

    0 讨论(0)
  • 2020-12-25 15:09

    You need to use this code:

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

    For more info, you can refer to this tutorial, or or check the answers to How to parse a JSON file in swift?.

    0 讨论(0)
  • 2020-12-25 15:26

    sendAsynchronousRequest has been deprecated in newer versions of Swift. Move to dataTaskWithRequest, luckily it is used pretty much the same way

    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()
    
    0 讨论(0)
  • 2020-12-25 15:27

    Like this:

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

    Or more verbose variant.

    NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
        /* Your code */
    })
    
    0 讨论(0)
提交回复
热议问题