Swift,在return列表之前等待两个完成块完成
Swift, Wait for two completion blocks to complete before return list
我试图调用两个单独的 api 端点,return 一些 json,这两个调用将对象添加到列表中...我如何等待这两个return将列表发送到视图控制器之前要完成的功能
import Alamofire
import SwiftyJSON
class SearchService {
var searchItemList = [SearchItem]()
func performFetch(keyword: String, count: Int, completion:(items: [SearchItem]?) -> ()){
>>>// NEED TO WAIT FOR THE fetchItemsA AND fetchItemsB TO FINISH THEM RETURN ‘searchItemList’
}
func fetchItemsA(keyword: String, count: Int, completion:(error:NSError?) -> ()) {
guard let url = self.searchUrl else {
return
}
let manager = Manager.sharedInstance
manager.request(.GET, url, parameters: ["keywords": keyword, "count": count], encoding: ParameterEncoding.URL)
.validate()
.responseJSON {response in
…
for item in items {
self.searchItemList.append(SearchItem(json: item)!)
}
…
completion(error: resultError)
}
func fetchItemsB(keyword: String, count: Int, completion:(error:NSError?) -> ()) {
guard let url = self.searchUrl else {
return
}
let manager = Manager.sharedInstance
manager.request(.GET, url, parameters: ["keywords": keyword, "count": count], encoding: ParameterEncoding.URL)
.validate()
.responseJSON {response in
…
for item in items {
self.searchItemList.append(SearchItem(json: item)!)
}
…
completion(error: resultError)
}
}
感谢任何帮助
如果 API 不同,您可以尝试 this answer。如果您想执行两个异步请求,最简单的解决方案是对请求进行计数并检查已完成的请求数(答案中的第一个解决方案)。请记住,响应可能是成功或错误。
我试图调用两个单独的 api 端点,return 一些 json,这两个调用将对象添加到列表中...我如何等待这两个return将列表发送到视图控制器之前要完成的功能
import Alamofire
import SwiftyJSON
class SearchService {
var searchItemList = [SearchItem]()
func performFetch(keyword: String, count: Int, completion:(items: [SearchItem]?) -> ()){
>>>// NEED TO WAIT FOR THE fetchItemsA AND fetchItemsB TO FINISH THEM RETURN ‘searchItemList’
}
func fetchItemsA(keyword: String, count: Int, completion:(error:NSError?) -> ()) {
guard let url = self.searchUrl else {
return
}
let manager = Manager.sharedInstance
manager.request(.GET, url, parameters: ["keywords": keyword, "count": count], encoding: ParameterEncoding.URL)
.validate()
.responseJSON {response in
…
for item in items {
self.searchItemList.append(SearchItem(json: item)!)
}
…
completion(error: resultError)
}
func fetchItemsB(keyword: String, count: Int, completion:(error:NSError?) -> ()) {
guard let url = self.searchUrl else {
return
}
let manager = Manager.sharedInstance
manager.request(.GET, url, parameters: ["keywords": keyword, "count": count], encoding: ParameterEncoding.URL)
.validate()
.responseJSON {response in
…
for item in items {
self.searchItemList.append(SearchItem(json: item)!)
}
…
completion(error: resultError)
}
}
感谢任何帮助
如果 API 不同,您可以尝试 this answer。如果您想执行两个异步请求,最简单的解决方案是对请求进行计数并检查已完成的请求数(答案中的第一个解决方案)。请记住,响应可能是成功或错误。