我希望确定其他类中的数据下载何时完成,然后将下载的数据返回给调用类。我已尝试使用完成处理程序,但这只告诉我数据已下载并且它们驻留在DataManager类中,如何返回调用类?
在FirstViewController.swift中:
func download(button: UIButton) {
DataManager.getJSONData(url, completionHandler:DataManager.resultHandler)
}
在DataManager.swift中:
class func getJSONData(urlInput:String, completionHandler: ((NSDictionary!) -> Void)?)
{
var url : NSURL! = NSURL(string:urlInput)
var request: NSURLRequest = NSURLRequest(URL:url)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)
let task : NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: error) as? NSDictionary!
// then on complete I call the completionHandler...
completionHandler?(jsonResult);
});
task.resume()
}
class func resultHandler(jsonResult:NSDictionary!)
{
NSLog("Data: %@ \n", jsonResult)
}
如何将jsonResult返回给FirstViewController.swift,或者通知FirstViewController.swift下载完成?
答案 0 :(得分:1)
看起来resultHandler
看起来并不多,所以而不是:
func download(button: UIButton) {
DataManager.getJSONData(url, completionHandler:DataManager.resultHandler)
}
你可以这样做:
func download(button: UIButton) {
DataManager.getJSONData(url) { jsonResult in
// use jsonResult here
}
}
这样,视频控制器将在检索完成时得到通知。