Swift - 完成处理程序不等待

时间:2017-04-25 17:34:51

标签: swift asynchronous alamofire

我的问题很简单。我使用TRON从站点获取一些数据,我需要等到成功获取数据而不是继续执行。但我的问题是主线程没有等到完成块完成。 我这样做是单元测试,所以在setUp()函数

    Meteorites.Service.sharedInstance.fetchData(completion: { (meteorites, err) in
        if err == nil {
            self.meteorites = meteorites
        }
    })

比测试函数我使用meteorites数组,但是我得到EXC错误(对象是零)

我做错了什么?有人可以解释一下吗?感谢

func fetchData(completion: @escaping ([Meteor]?, APIError<Service.JSONError>?) -> ()) {
    print("fetching")
    let request: APIRequest<Meteorites, JSONError> = tron.request("")
    request.perform(withSuccess: { (meteorites) in
        completion(meteorites.meteorites, nil)
    }) { (err) in
        completion(nil, err)
    }
}

万一陨石课

class Meteorites: JSONDecodable {
    var meteorites: [Meteor]

    required init(json: JSON) throws {
        print("fetched")
        var meteorites = [Meteor]()
                    for meteorJson in json.array! {
            let dateString = meteorJson["year"]
            if dateString != JSON.null {
                let dateFormatter = DateFormatter()

                dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS" //Your date format
                dateFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00")!
                let date = dateFormatter.date(from: dateString.stringValue)

                if let compareDate = dateFormatter.date(from: "2011-01-01T00:00:00.000") {
                    if date! >= compareDate {
                        let meteor = Meteor()
                        meteor.date = date!
                        meteor.name = meteorJson["name"].stringValue
                        meteor.fall = meteorJson["fall"].stringValue
                        meteor.id = meteorJson["id"].intValue
                        meteor.reclong = meteorJson["reclong"].doubleValue
                        meteor.reclat = meteorJson["reclat"].doubleValue
                        meteor.mass = meteorJson["mass"].intValue
                        meteor.nametype = meteorJson["nametype"].stringValue
                        meteor.recclass = meteorJson["recclass"].stringValue
                        meteor.lastUpdate = NSDate()
                        meteorites.append(meteor)
                    }
                }
            }
        }
        self.meteorites = meteorites


    }
}

0 个答案:

没有答案