Если вы хотите, чтобы метод MakeGetRequest
возвращал данные, полученные через dataTaskWithURL
, вы не можете этого сделать. Этот метод выполняет асинхронный вызов, который, скорее всего, завершается после того, как MakeGetRequest
уже вернулся, но в более общем случае его нельзя узнать детерминированным способом.
Обычно асинхронные операции обрабатываются с помощью замыканий - вместо того, чтобы ваш метод возвращал данные, вы передаете ему замыкание, принимая параметры, которые возвращаются в вашей версии кода - из замыкания, вызванного при завершении dataTaskWithURL
, вы вызываете этот обработчик завершения замыкание, обеспечивающее соответствующие параметры:
class func MakeGetRequest(urlString: String, completionHandler: (data: NSData, error: NSError) -> Void) -> Void
{
let url = NSURL(string: urlString)
var dataResponse: NSData
var err: NSError
let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
completionHandler(data: data, error: error)
})
task.resume()
}
Обновление Swift 5:
class func makeGetRequest(urlString: String, completionHandler: @escaping (Data?, Error?) -> Void) -> Void {
let url = URL(string: urlString)!
var dataResponse: Data
var err: NSError
let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, respone, error) -> Void in
completionHandler(data, error)
})
task.resume()
}
person
Antonio
schedule
14.01.2015