我怎么能等到函数从alamofire获取请求获取所有数据?
GetData.swift文件:
import Foundation
import Alamofire
import SwiftyJSON
import ObjectMapper
func getStartData() -> Void {
let sharedBranch = BranchSingleton.sharedInstance
let sharedArticle = ArticleSingleton.sharedInstance
Alamofire.request(.GET, Config().apiBranch)
.responseJSON { request, response, result in
let jsonObj = SwiftyJSON.JSON(result.value!)
for obj in jsonObj {
let branch = Mapper<Branch>().map(obj.1.rawString()!)
sharedBranch.addBranch(branch!)
}
}
Alamofire.request(.GET, Config().apiArticle)
.responseJSON { request, response, result in
let jsonObj = SwiftyJSON.JSON(result.value!)
for obj in jsonObj {
let article = Mapper<Article>().map(obj.1.rawString()!)
sharedArticle.addArticle(article!)
}
}
}
ViewController.swift文件:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
getStartData() // need to wait until all requests are finished then do print
print(sharedArticle.articleList)
}
}
SingletonObj.swift文件:
import Foundation
class BranchSingleton {
var branchList: [Branch] = []
class var sharedInstance: BranchSingleton {
struct Static {
static let instance: BranchSingleton = BranchSingleton()
}
return Static.instance
}
func addBranch(branch: Branch) {
branchList.append(branch)
}
}
class ArticleSingleton {
var articleList: [Article] = []
class var sharedInstance: ArticleSingleton {
struct Static {
static let instance: ArticleSingleton = ArticleSingleton()
}
return Static.instance
}
func addArticle(article: Article) {
articleList.append(article)
}
}
我需要等到getStartData()
完成,然后pring singleton array ..
我该怎么做?
这个getStartData包含2个以上的请求,但我刚给出了2 ..
的例子答案 0 :(得分:1)
你问了一个非问题。 没有理由到&#34;等待&#34;。你也不是。你只是异步地做你做的事。同时界面必须保持活动状态;用户必须能够继续工作。因此没有什么可以等待&#34; 的的
现在,如果问题是,当所有请求完成后,如何以优雅的方式向应用程序的其余部分发送信号,一个好的答案就是使用NSProgress。所有不同的请求都可以为常见的NSProgress对象做出贡献。好的是它的fractionCompleted
可用KVO观察到,所以当它大于或等于1.0
时,你就完成了。
但你实际上并不需要NSProgress;你可以只增加或减少一个KVO可观察的实例变量(当然要小心线程)。如果您知道有n
个进程,那么您可以在n
处启动一个变量,并让每个进程在完成时递减它;变量的didSet
观察者可以在我们达到零时采取行动。
重点在于:你不要等待&#34;你只是让所有不同的活动有助于一些共同的中心价值,而这些价值已经过去了。这意味着我们已经完成&#34;然后可以采取行动。