2014-09-24 59 views
1

我有以下代碼:NSURLSession dataTaskWithRequest斯威夫特

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

它的一個異步函數,所以你必須處理函數內的結果數據。請按照下面的代碼 – dhanasekar 2017-05-03 13:25:08

回答

1

檢查,如果你的數據是零,那麼你可以使用它

這裏是一個斯威夫特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將執行的功能是異步的,如果你想使用結果數據,它必須在數據任務函數內部使用。現在打印語句將打印響應。如果您使用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()