如何在Swift中使用NSURLSessionDataTask

Doo*_*Man 21 ios swift

有人能帮我吗?我找不到完成语法的好例子.

var url : NSURL = NSURL.URLWithString("https://itunes.apple.com/search?term=\(searchTerm)&media=software")
var request: NSURLRequest = NSURLRequest(URL:url)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession.sessionWithConfiguration(config)

NSURLSessionDataTask(session.dataTaskWithRequest(request, completionHandler: ((NSData!, NSURLResponse!, NSError!) -> Void)?)
Run Code Online (Sandbox Code Playgroud)

谢谢!

aka*_*kyy 71

目前还不清楚你在问什么,但我注意到你在代码中有一些错误:

  1. 你应该创建你的session使用NSURLSession(configuration: config)

  2. session.dataTaskWithRequest返回一个NSURLSessionDataTask,所以不需要将其包装NSURLSessionDataTask()(也就是实例化一个新NSURLSessionDataTask对象).

  3. 完成处理程序是一个闭包,下面是你如何创建特定的clousure:

    {(data : NSData!, response : NSURLResponse!, error : NSError!) in
    
        // your code
    
    }
    
    Run Code Online (Sandbox Code Playgroud)

这是更新的代码:

let url = NSURL(string: "https://itunes.apple.com/search?term=\(searchTerm)&media=software")
let request = NSURLRequest(URL: url)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)

let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in

    // notice that I can omit the types of data, response and error

    // your code

});

// do whatever you need with the task e.g. run
task.resume()
Run Code Online (Sandbox Code Playgroud)

  • 确保在关闭后调用任务.resume().这将触发请求 (3认同)

eXh*_*ted 12

如果您在完成语法方面遇到问题,可以在调用dataTaskWithRequest(..)之前创建完成函数以使其更清晰

func handler (data: NSData!, response: NSURLResponse!, error: NSError!) {
            //handle what you need
        }

session.dataTaskWithRequest(request, completionHandler: handler)
Run Code Online (Sandbox Code Playgroud)


Rac*_*hit 5

你也可以简单地使用它: -

let url = "api url"

let nsURL = NSURL

let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL) {
(data, response, error) in
   // your condition on success and failure
}

task.resume()
Run Code Online (Sandbox Code Playgroud)