在 运行 另一个之前完成任务的完成处理程序

completion handler to finish tasks before running another

我真的很困惑,不知道如何按照我希望的顺序执行任务。

我有从服务器数据构建数组的功能,return结果是数组。 - 这工作正常并且 return 结果。

完成这件事(两次)后,我想 运行 另一个功能。出于某种原因,目前我正在尝试将这些函数嵌入到另一个带有完成块的函数中,一旦这两个完成并 returned 数据,该完成块将 return 为真,但我正在尝试这个它 return 在函数完成之前获取结果。

func getCollectionArrays(_ block: ((Bool) -> Void)? = nil) {

    var resultPack: Bool!
    var resultPart: Bool!

        BuildArray.buildArrayFromQuery(queryForCollection: "Pack", sender: self, completeBlock: { (result) in

            if result != nil {

                resultPack = true
            }

        })

                BuildArray.buildArrayFromQuery(queryForCollection: "Part", sender: self, completeBlock: { (result) in

                    if result != nil {

                        resultPart = true
                    }

                })

    // this is returning nil because there isn't enough time for "BuildArray.buildArrayFromQuery" to run
    if resultPack == true && resultPart == true {

        block!(true)

    }

}

将下一步移到前面的闭包中。继续筑巢。像这样:

func getCollectionArrays(_ block: ((Bool) -> Void)? = nil) {
    var resultPack: Bool!
    var resultPart: Bool!
    BuildArray.buildArrayFromQuery(queryForCollection: "Pack", sender: self, completeBlock: { (result) in
        if result != nil {
            resultPack = true
        }
        // next step, nested in this closure
        BuildArray.buildArrayFromQuery(queryForCollection: "Part", sender: self, completeBlock: { (result) in
            if result != nil {
                resultPart = true
            }
            // next step, nested in _this_ closure
            if resultPack == true && resultPart == true {
                block!(true)
            }
        })
    })
}