Eminim ki bu çoğu için kolay, ama yeni başlayan biri ve bunu anlayamıyorum.SWIFT2.0: görev tamamlanmadan önce işlev döndürür
Çevrimiçi JSON dosyasını ayrıştırmak için bir işlev yapıyorum. Dosya ayrıştırıldıktan sonra bu işlev bir Dize döndürmelidir, ancak görevin "geri dönüş" den önce tamamlanmasını beklemez. Bu nedenle, her zaman yanlış bir değerle sonuçlanırım.
benim işlevi:
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
}
ve çağrı:
override func viewDidLoad() {
super.viewDidLoad()
let test = getJsonDataFromPath("http://coulon.xyz/JobX/APIs/getListOfJobs.php")
print("Value returned by getJsonDataFromPath: \(test)")
}
Hep yanlış sırada çıktı almak
: getJsonDataFromPath tarafından döndürülen
Değer: + + boş ++ HTTP SORUN: 200 videoId: kzv1NQGdsyk
Değer döndürmeden önce task.resume öğesinin tamamlandığından nasıl emin olabilirim?
öncedenSaygılarımızla, Julien Çok teşekkür ederim
Böyle Swift kapanmasını uygulamalıdır
iade etmeyin , bir geri arama kullanın ("tamamlama işleyici"). Burada sadece bir örnek: http://stackoverflow.com/a/35358750/2227743 ve SO üzerinde birçok başkaları var. – Moritz