Saya telah membuat kelas utilitas dalam proyek Swift saya yang menangani semua permintaan dan tanggapan REST. Saya telah membangun REST API sederhana sehingga saya dapat menguji kode saya. Saya telah membuat metode kelas yang perlu mengembalikan NSArray tetapi karena panggilan API adalah asinkron, saya harus kembali dari metode di dalam panggilan async. Masalahnya adalah pengembalian asinkron batal. Jika saya melakukan ini di Node, saya akan menggunakan janji JS tetapi saya tidak dapat menemukan solusi yang berfungsi di Swift.
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...
}
}