合并一种类型的可观察对象,然后链接到另一种类型的可观察对象

时间:2016-11-25 05:43:54

标签: ios swift rx-swift

是否有针对不同类型的Observable进行链接的解决方案? 我想要merge Observable,当每个都发送Completed事件时,发出下一个Observable(signal)。

类似于ReactiveCocoa的{​​{1}}。

then

2 个答案:

答案 0 :(得分:2)

需要知道Element的类型,因此您可以考虑以下几个选项:

  1. 制作Any类型,IntString都可以。{/ li>
  2. 将协议一致性添加到IntString,这可能会暴露您希望在其上使用的通用界面。
  3. 将类型设为enum,其中包含IntString的案例。
  4. 以下是每个选项的实现:

    使用Any

    let withAny = PublishSubject<Any>()
    
    withAny.subscribe(onNext: { print($0) })
        .addDisposableTo(disposeBag)
    
    withAny.onNext(1)
    withAny.onNext("a")
    
      

    1
      

    使用一些protocol

    protocol SomeProtocol {
        // put whatever interface from the elements in here
    }
    extension String : SomeProtocol {}
    extension Int : SomeProtocol {}
    
    let withProtocol = PublishSubject<SomeProtocol>()
    
    withProtocol.subscribe(onNext: { print($0) })
        .addDisposableTo(disposeBag)
    
    withProtocol.onNext(2)
    withProtocol.onNext("b")
    
      

    2
      b

    使用一些enum

    enum SomeEnum {
        case int(Int)
        case str(String)
    }
    
    let withEnum = PublishSubject<SomeEnum>()
    
    withEnum.subscribe(onNext: { print($0) })
        .addDisposableTo(disposeBag)
    
    withEnum.onNext(.int(3))
    withEnum.onNext(.str("c"))
    
      

    INT(3)
      str(&#34; c&#34;)

答案 1 :(得分:0)

我通过takeLast(1)然后flatMap将其实现为需要Observable。