Swift projemde tüm REST isteklerini ve yanıtlarını işleyen bir yardımcı program sınıfı oluşturdum. Kodumu test edebilmek için basit bir REST API oluşturdum. Bir NSArray döndürmesi gereken bir sınıf yöntemi oluşturdum, ancak API çağrısı zaman uyumsuz olduğundan, zaman uyumsuz çağrının içindeki yöntemden dönmem gerekiyor. Sorun, zaman uyumsuzun void döndürmesidir. Bunu Node'da yapıyor olsaydım JS vaatlerini kullanırdım ama Swift'de çalışan bir çözüm bulamıyorum.
import Foundation
class Bookshop {
class func getGenres() -> NSArray {
println("Hello inside getGenres")
let urlPath = "http://creative.coventry.ac.uk/~bookshop/v1.1/index.php/genre/list"
println(urlPath)
let url: NSURL = NSURL(string: urlPath)
let session = NSURLSession.sharedSession()
var resultsArray:NSArray!
let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in
println("Task completed")
if(error) {
println(error.localizedDescription)
}
var err: NSError?
var options:NSJSONReadingOptions = NSJSONReadingOptions.MutableContainers
var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: options, error: &err) as NSDictionary
if(err != nil) {
println("JSON Error \(err!.localizedDescription)")
}
//NSLog("jsonResults %@", jsonResult)
let results: NSArray = jsonResult["genres"] as NSArray
NSLog("jsonResults %@", results)
resultsArray = results
return resultsArray // error [anyObject] is not a subType of 'Void'
})
task.resume()
//return "Hello World!"
// I want to return the NSArray...
}
}