Ios 合并一种类型上的可观察对象,然后链接到另一种类型的可观察对象
是否有链接不同类型观测值的解决方案? 我想合并观察对象,当每个观察对象发送Ios 合并一种类型上的可观察对象,然后链接到另一种类型的可观察对象,ios,swift,rx-swift,Ios,Swift,Rx Swift,是否有链接不同类型观测值的解决方案? 我想合并观察对象,当每个观察对象发送Completed事件时,发出下一个观察对象(信号) 类似于reactivecococoa的然后 let signal = Observable<String>.create { observer in observer.onCompleted() return Disposables.create() } let signals: [Observable<Int>] = [Obs
Completed
事件时,发出下一个观察对象(信号
)
类似于reactivecococoa
的然后
let signal = Observable<String>.create { observer in
observer.onCompleted()
return Disposables.create()
}
let signals: [Observable<Int>] = [Observable.just(1), Observable.just(2), Observable.just(3)]
Observable.from(signals).merge().concat(signal).subscribe {
print("completed")
}
let signal=Observable.create{observator in
observer.onCompleted()
返回一次性物品。创建()
}
让信号:[可观察]=[可观察。刚好(1),可观察。正好(2),可观察。刚好(3)]
可观察。从(信号).merge().concat(信号).subscribe{
打印(“已完成”)
}
需要知道元素的类型
,因此我可以考虑以下几个选项:
Any
类型设置为Int
和String
都可以Int
和String
,这可以公开您想要在它们上使用的公共接口enum
,该类型同时具有Int
和String
的大小写任意
:
2b 使用一些
枚举
:
enum SomeEnum{
案例int(int)
案例str(字符串)
}
let withEnum=PublishSubject()
订阅(onNext:{print($0)})
.addDisposableTo(disposeBag)
withEnum.onNext(.int(3))
withEnum.onNext(.str(“c”))
int(3)str(“c”)
我通过
takeLast(1)
然后flatMap
实现了这一点。你认为takeLast(1)
然后做flatMap
怎么样?是的,只要你不想使用原始observatable
的元素,那就行了,但只需将其用作触发第二个可观察的的方法。从你的问题来看,听起来好像你真的想要两者的元素,链接起来。如果您打算使用takeLast
和flatMap
,那么您可以更简单地使用concat
。只要您确信在原始的可观察的上至少会得到一个元素,它就会产生相同的效果。
let withAny = PublishSubject<Any>()
withAny.subscribe(onNext: { print($0) })
.addDisposableTo(disposeBag)
withAny.onNext(1)
withAny.onNext("a")
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")
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"))