在 运行 另一个之前完成任务的完成处理程序
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)
}
})
})
}
我真的很困惑,不知道如何按照我希望的顺序执行任务。
我有从服务器数据构建数组的功能,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)
}
})
})
}