2014-09-24 4 views
1

У меня есть следующий код:NSURLSession dataTaskWithRequest Swift

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. Как я могу получить данные, которые были возвращены запросом?

+0

Сво Async, поэтому вам нужно обрабатывать данные результата внутри функции. следуйте приведенному ниже коду – dhanasekar

ответ

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

dataTask будет выполнять функцию async, если вы хотите использовать данные результата, они должны использоваться внутри функции задачи данных. теперь оператор печати распечатает ответ. Если вы используете resultData вне dataTask FUNC он возвратит ноль

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() 
Смежные вопросы