从使用SwiftyJSON的函数返回填充的数组

时间:2015-04-13 23:45:07

标签: function swift nsarray swifty-json

我有一个使用SwiftyJSON从Web服务获取信息的函数。当我使用我的DataManager类调用服务时,我能够成功填充我的数组,当我打印出来时,它给了我想要的东西。但是,我无法从我的函数返回填充的数组,因为我认为它在函数结束时超出了范围。任何人都可以告诉我如何让我的函数返回我的填充数组而不超出范围?如果也许其他我做错了,任何帮助都会受到赞赏。

func getEarthquakeInfo()->NSArray {
        var info = [AppModel]()

        DataManager.getEarthquakeDataFromFileWithSuccess {
            (data) -> Void in

                let json = JSON(data: data)


                if let JsonArray =  json.array {

                    for appDict in JsonArray {
                        var ids: String? = appDict["id"].stringValue
                        var title: String? = appDict["title"].stringValue
                        var time: String? = appDict["time"].stringValue
                        var information = AppModel(idEarth: ids, title: title, time: time)

                        info.append(information)
                    }


                }


           println("\(info)") // will print the results that I need


        }



        return info // This is an empty array
    }

这是打印出应用时的结果示例: ID:146052,标题:M 1.7爆炸 - 华盛顿花岗岩瀑布0km E时间:2015-04-13 21:29:40 UTC, DataManager4.swift文件:

    let earthquakeURL = "http://www.kuakes.com/json/"
class DataManager {
    class func getEarthquakeDataFromFileWithSuccess(success: ((websiteData: NSData) -> Void)) {
        //1
        loadDataFromURL(NSURL(string: earthquakeURL)!, completion:{(data, error) -> Void in
            //2
            if let urlData = data {
                //3
                success(websiteData: urlData)
            }
        })
 }


    class func loadDataFromURL(url: NSURL, completion:(data: NSData?, error: NSError?) -> Void) {
        var session = NSURLSession.sharedSession()

        // Use NSURLSession to get data from an NSURL
        let loadDataTask = session.dataTaskWithURL(url, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
            if let responseError = error {
                completion(data: nil, error: responseError)
            } else if let httpResponse = response as? NSHTTPURLResponse {
                if httpResponse.statusCode != 200 {
                    var statusError = NSError(domain:"com.kuakes", code:httpResponse.statusCode, userInfo:[NSLocalizedDescriptionKey : "HTTP status code has unexpected value."])
                    completion(data: nil, error: statusError)
                } else {
                    completion(data: data, error: nil)
                }
            }
        })

        loadDataTask.resume()
    }


}

1 个答案:

答案 0 :(得分:0)

以下是我如何解决它:

var info = [AppModel]()



    func getEarthquakeInfo(completion: (results : NSArray?) ->Void ){

        DataManager.getEarthquakeDataFromFileWithSuccess {
            (data) -> Void in

                let json = JSON(data: data)


                if let JsonArray =  json.array {

                    for appDict in JsonArray {
                        var ids: String? = appDict["id"].stringValue
                        var title: String? = appDict["title"].stringValue
                        var time: String? = appDict["time"].stringValue
                        var information = AppModel(idEarth: ids, title: title, time: time)

                        self.info.append(information)
                        completion(results: self.info)
                    }


            }

        }



    }