本文介绍了如何在 RxSwift 中延迟从集合中一个一个地发出项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想从 anyCollection 创建一个 Observable ,它会在延迟后一个一个地发射每个元素.另外,onNext 我想对项目(模型)进行一些更新.
I would like to create an Observable from anyCollection that will emit each element one by one, after a delay. Also, onNext I would like to perform some updates to the item (model).
例如:
//一只一只喂狗,间隔 5 秒.
// Feed all dogs, one by one, with an interval of 5 seconds.
class Dog {
var name: String?
var age: Int?
var feeded = false
init(_ name: String, _ age: Int){
self.name = name
self.age = age
}
}
func feedDogs(){
let dog1 = Dog("Ren", 3)
let dog2 = Dog("Bega", 7)
let dog3 = Dog("Xuxu", 11)
let delay = 6 // seconds
let allDogs = [dog1, dog2, dog3]
// Observable....
// Expected results after subscribe
// Start - > 0 seconds
// dog1.feeded // true
// time lapse -> 6 seconds
// dog2. feeded // true
// timelapse -> 12 seconds
// dog3.feeded // true
}
我尝试使用zip"之类的zipWith"(在 RxJava 中),但似乎在 RxSwift 中不受支持.
I tried to use "zip" like "zipWith" (in RxJava), but it seems that in RxSwift is not supported.
推荐答案
嗯……经过一些研发,这是针对我的问题经过测试的工作版本.
Well... after some R&D this is a tested working version for my question.
Observable.zip(Observable.from(allDogs), Observable<Int>.interval(RxTimeInterval(delay), scheduler: MainScheduler.instance)).subscribe(onNext: { (dog, index) in
print(dog.name)
}
)
这篇关于如何在 RxSwift 中延迟从集合中一个一个地发出项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!