将JSON数据返回给Swift中的调用类

时间:2015-12-06 19:48:52

标签: json swift

我希望确定其他类中的数据下载何时完成,然后将下载的数据返回给调用类。我已尝试使用完成处理程序,但这只告诉我数据已下载并且它们驻留在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下载完成?

1 个答案:

答案 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
    }
}

这样,视频控制器将在检索完成时得到通知。