如何在 RxSwift 中延迟从集合中一个一个地发出项目 [英] How to emit items, one by one, from Collection with a delay in RxSwift

查看:46
本文介绍了如何在 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 中延迟从集合中一个一个地发出项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆