我正在编写一个依赖于来自各种站点/服务的数据的应用程序,并且涉及基于来自这些不同来源的数据执行计算以生成最终产品.
我编写了一个带有两个函数的示例类,它们收集来自两个源的数据.我选择使函数不同,因为有时我们根据源应用不同的身份验证方法,但在这个例子中我只是将它们剥离到最简单的形式.这两个函数都使用Alamofire来触发和处理请求.
然后我有一个初始化函数,它说如果我们成功地从两个源收集数据,然后加载另一个nib文件,否则等待几秒钟,如果没有返回响应,则加载服务器错误nib文件.
我试图让这个例子尽可能简单.实质上.这是我想要遵循的那种逻辑.不幸的是,这似乎目前在其当前实施中不起作用.
import Foundation
class GrabData{
var data_source_1:String?
var data_source_2:String?
init(){
// get data from source 1
get_data_1{ data_source_1 in
println("\(data_source_1)")
}
// get data from source 2
get_data_2{ data_source_1 in
println("\(data_source_1)")
}
var timer = 0;
while(timer<5){
if((data_source_1 == nil) && (data_source_2 == nil)){
// do nothing unless 4 seconds has elapsed
if (timer == 4){
// load server error nib
}
}else{
// load another nib, and start manipulating data
}
// sleep for 1 second …Run Code Online (Sandbox Code Playgroud) 我正在使用Firebase(Swift)读取用户所属的组ID列表,然后循环访问ID以获取有关组的更多信息.与此类似的东西(伪代码):
// List the names of all Mary's groups
var ref = new Firebase("https://docs-examples.firebaseio.com/web/org");
// fetch a list of Mary's groups
ref.child("users/mchen/groups").on('child_added', function(snapshot) {
// for each group, fetch the name and print it
String groupKey = snapshot.key();
ref.child("groups/" + groupKey + "/name").once('value', function(snapshot) {
System.out.println("Mary is a member of this group: " + snapshot.val());
});
});
Run Code Online (Sandbox Code Playgroud)
我如何知道所有Firebase observeSingleEvent都已执行,因此我可以在我的集合视图中重新加载数据.
编辑:
经过更多的研究,这看起来非常类似于这个问题.我可以使用dispatch_group或Bolts框架
编辑2:
感谢@appzYourLife的回答.我也能用它来解决它RxSwift.我只是用观察者包装Firebase调用并将它们保存在一个数组中然后调用
Observable.zip(observables, { _ in }).subscribe(onCompleted: {
self.contentView.collection.reloadData() // do …Run Code Online (Sandbox Code Playgroud)