【问题标题】:How to use NSURLConnection completionHandler with swift如何快速使用 NSURLConnection completionHandler
【发布时间】:2014-06-03 13:40:02
【问题描述】:

有人知道处理程序(块)如何快速工作吗?我正在尝试运行此代码,但我找不到任何有关 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)!)

【问题讨论】:

    标签: block nsurlconnection swift


    【解决方案1】:

    像这样:

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

    或更详细的变体。

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

    【讨论】:

    • 谁能帮我理解如何从 NSURLConnection.sendAsynchronousRequest 中获取数据? completionHandler 需要一个 void 返回值,所以我不确定如何从 completionHandler 中获取我的请求数据。谢谢!
    • 您可以在调用类方法 sendAsynchronousRequest 的函数中访问其他变量,例如,var lol: String! = "a" NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in /* Your code */ lol = " b" })
    【解决方案2】:

    您需要使用此代码:

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

    更多信息可以参考this教程,或者查看How to parse a JSON file in swift?的答案。

    【讨论】:

      【解决方案3】:

      sendAsynchronousRequest 在较新版本的 Swift 中已被弃用。移至dataTaskWithRequest,幸运的是它的使用方式几乎相同

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

      【讨论】:

        【解决方案4】:

        您在这里寻找的正确术语是 Closure。 Swift 中的闭包类似于 C 和 Objective-C 中的块。除了 Tomáš 的回答之外,还有另一个简短版本可以在此处使用完成处理程序:

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

        这里我使用了简写参数名称。我以 $0 的身份访问 response,以 $1 的身份访问 data,以 的身份访问 error >3 美元。我发现这种语法更容易读写,除非参数数量很大,否则代码将变得不可读。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-07-27
          • 1970-01-01
          • 1970-01-01
          • 2018-04-13
          • 2014-11-17
          • 2017-04-08
          • 1970-01-01
          相关资源
          最近更新 更多