Я уверен, что это легко для большинства из вас, но я новичок, и я не могу понять этого.SWIFT2.0: функция возвращается до завершения задачи
Я создаю функцию для разбора файла JSON в Интернете. Эта функция должна возвращать строку после того, как файл был проанализирован, но он не дожидается завершения задачи перед «возвратом». Поэтому я всегда получаю неправильное значение.
моя функция:
func getJsonDataFromPath(path: String) -> String {
var videoId: String
videoId = "++ empty ++"
let url = NSURL(string:path)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url!) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
if let httpResponse = response as? NSHTTPURLResponse {
print("HTTP RESPONSE: \(httpResponse.statusCode)")
} // END OF if let httpResponse = response as? NSHTTPURLResponse
let json = JSON(data: data!)
// print(json)
if (json.count > 0) {
videoId = json[0]["videoId"].string!
print("videoId is: \(videoId)")
}
}
task.resume()
return videoId
}
и его призыв:
override func viewDidLoad() {
super.viewDidLoad()
let test = getJsonDataFromPath("http://coulon.xyz/JobX/APIs/getListOfJobs.php")
print("Value returned by getJsonDataFromPath: \(test)")
}
Я всегда получаю выход в неправильном порядке:
Значение, возвращенное getJsonDataFromPath: + + пусто ++ HTTP RESPONSE: 200 videoId is: kzv1NQGdsyk
Как я могу убедиться, что task.resume завершен, прежде чем возвращать значение?
Спасибо большое заранее,
С уважением, Julien
Не возвращайте , используйте обратный вызов («обработчик завершения»). Просто пример: http://stackoverflow.com/a/35358750/2227743, и есть много других на SO. – Moritz