【发布时间】:2018-01-06 22:29:16
【问题描述】:
假设我有一个 Observable 和一个 Observable(例如姓名和年龄),我将它们压缩并用它们进行一些转换,但有时我必须在 zip 中进行这些转换(延迟这个例子)和其他人只是返回一个值。所以 tuple(String, Int) 的原始顺序变得混乱了。
var shouldDelay = true
func names() -> Observable<String> {
return Observable.of("First name", "John", "Martina")
}
func ages() -> Observable<Int> {
return Observable.of(20,15,17)
}
Observable.zip(names(), ages())
.flatMap{ arg -> Observable<(String, Int)> in
if shouldDelay {
shouldDelay = !shouldDelay
return Observable.just(arg).delay(1, scheduler: MainScheduler.instance)
}
return Observable.just(arg)
}
.map { $0.0 + " " + $0.1.description }
.subscribe { event in
print(event.element ?? "")
}
所以基本上我得到John 15, Martina 17, FirstName 20(那些元组是正确的),但我希望FirstName 20, John 15, Martina 17。
有什么提示可以解决这个问题吗?我只能想到重新组合它们(.toArray)并在内部排序它们,最后是 Observable.from
【问题讨论】:
-
只有当
shouldDelay为真时才会发生这种情况? -
是的,例如,将延迟视为更新年龄的网络请求,因为它已经过时了(我只是用延迟来模拟它)