NSURLSession dataTaskWithRequest Swift

Posted

技术标签:

【中文标题】NSURLSession dataTaskWithRequest Swift【英文标题】: 【发布时间】:2014-09-24 14:12:43 【问题描述】:

我有以下代码:

var resultData:NSData?

task = session!.dataTaskWithRequest(request)  (data: NSData!, response: NSURLResponse!, error: NSError!) in

    if ((error) != nil) 
        println("Error")
        return
    
    resultData = data


task!.resume()

但是,执行后 resultData 是nil。如何获取请求返回的数据?

【问题讨论】:

它是一个异步函数,所以你必须在函数内部处理结果数据。按照下面的代码 【参考方案1】:

检查你的数据是否为零,然后你可以使用它

这是一个 Swift 3 示例:

let url = NSURL(string: "https://itunes.apple.com/search?term=jack+johnson&limit=2")!
let request = NSMutableURLRequest(url: url as URL)
let session = URLSession.shared

let task = session.dataTask(with: request as URLRequest)  data, response, error in
    if error != nil 
        print("error: \(error!.localizedDescription): \(String(describing: error))")
    
    else if data != nil 
        if let str = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 
            print("Received data:\n\(str)")
        
        else 
            print("unable to convert data to text")
        
    


task.resume()

【讨论】:

【参考方案2】:

dataTask 将执行的函数是异步的,如果你想使用结果数据,它必须在数据任务函数内部使用。现在 print 语句将打印响应。如果你在 dataTask 函数之外使用 resultData,它将返回 nil

var resultData:NSData?

let dataTask = session.dataTask(with: request as URLRequest) 
            (data, response, error) in

            guard let data = data, error == nil else  return 

            if error != nil 
                error

resultData = data
print(NSString(data: data, encoding: String.Encoding.utf8.rawValue)!)
dataTask.resume()

【讨论】:

以上是关于NSURLSession dataTaskWithRequest Swift的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发系列-NSURLSession

学习NSURLSession

NSURLSession各文件关系

iOS开发-NSURLSession

NSURLSession学习

iOS开发 GETPOST请求方法:NSURLSession篇