永远不会执行完成块中的功能

时间:2018-04-06 09:21:35

标签: swift request completion

我有以下情况:

涉及的课程是

  • ViewController (UIViewController类型)
  • RequestHandler
  • DataRequest (为请求导入Alamofire)

步骤1)

override func viewDidLoad() {
    super.viewDidLoad()
    requestHandler.getData(view: self) 
}

所以在这里,我的 RequestHandler 类的实例正在调用它的 getData() -function。

步骤2)

func getData(view: ViewController) {
    let dataRequest = DataRequest()
    dataRequest.getDataTree(handler: self) { response in
        view.saveData(dataTree: reponse)
    }
}

在我的类 RequestHandler 中的 getData 方法中,我正在创建所需Request-class的实例。在这种情况下,类 DataRequest 的实例。然后,该实例将其函数 getDataTree()分类,并通过调用 saveData() -function来处理对我的 ViewController 的响应。

步骤3)

import Foundation
import SwiftyJSON
import Alamofire

class DataRequest {
    func getDataTree(handler: RequestHandler, completion: @escaping ([String:[String:[String:[SomeStruct]]]]) -> ()) {

        let requestURL = constants.Url.dataURL

        Alamofire.request(requestURL, method: .post, encoding: URLEncoding.default)
            .validate()
            .responseJSON(completionHandler: { response in
                completion(self.getServices(jsonData: JSON(data: response.data!)))
    })
}

    private func getServices(jsonData: JSON) -> [String:[String:[String:[SomeStruct]]]] {
        var serviceDict: [String:[String:[String:[SomeStruct]]]] = [:]
        for (k, subJson):(String, JSON) in jsonData {
            let key = k
            let dict: [String:[String:[SomeStruct]]] = getNames(jsonData: subJson)
            serviceDict[key] = dict
        }
        return serviceDict
    }

..然后声明 getNames -function等,直到最后,数组中的SomeStruct对象也被解析。

现在您已获得背景信息,我的问题如下: 通过调试我发现函数 getDataTree 被调用并执行,但 getServices -function永远不会执行,尽管在完成块中被调用。

我不到一年前才开始做程序员,所以我的经验有限。我可能只是犯了一个非常微不足道的错误。

非常感谢您的帮助!

0 个答案:

没有答案