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的主要内容,如果未能解决你的问题,请参考以下文章