【发布时间】:2017-08-30 02:48:02
【问题描述】:
我正在尝试在 for 循环中使用完成处理程序。问题是它会在完成处理程序返回之前继续运行循环,因为它是一个异步调用。附上我的代码。我需要使用 GCD 吗?我是 swift/ios 的新手(显然)。任何建议将不胜感激。鲍勃
for srcTerm in sFields { //search using all search fields
multiQuery (searchTerm: srcTerm) {
if srResult.count < self.lastValue {
self.lastValue = srResult.count
self.lastSearch = srcTerm
}
}
// Do more stuff
}
func multiQuery (searchTerm: String, completion: @escaping ([PFObject]) -> ()) {
var exArray = [PFObject] ()
let query = PFQuery(className: "searchLinks")
do {
query.whereKey("searchTerms", equalTo: searchTerm)
query.findObjectsInBackground (block: { (objects, error)-> Void in
if let error = error {
print("Error Generated: ",error)
return
}
if let objects = objects {
// do stuff
}
completion(self.srResult)
})
}
} // end of function
【问题讨论】:
-
有几种方法可以做到这一点(调度组、承诺等)。看看stackoverflow.com/a/23112134/2124535
-
所有查询完成后你想做什么?上面链接的问题/响应(第二个)看起来就像您正在寻找的那样,尽管 API 在 Swift 3 中已经进行了一些更新。
-
你能提供一个简单的例子来说明如何使用 GCD 做到这一点吗?非常感谢。
标签: swift asynchronous parse-platform completionhandler