如何Observable
在RxSwift中合并2种不同类型的?
例如:
var a: Observable<Int>
var b: Observable<Void>
Observable.of(a,b).merge()
由于类型参数差异而无法使用。
对merge
他们来说,他们需要具有相同的类型Element
。
因此,一种选择是丢弃它们的类型信息并转换为AnyObject
。现在可以将它们合并:
let stringSubject = PublishSubject<String>()
let stringObservable = stringSubject.asObservable().map { $0 as AnyObject }
let intSubject = PublishSubject<Int>()
let intObservable = intSubject.asObservable().map { $0 as AnyObject }
Observable.of(stringObservable, intObservable).merge()
.subscribeNext { print($0) }
.addDisposableTo(disposeBag)
stringSubject.onNext("a")
stringSubject.onNext("b")
intSubject.onNext(1)
intSubject.onNext(2)
stringSubject.onNext("c")
输出:
a
b
1
2
c
另一种选择是将其包装在一个枚举中:
enum Container {
case S(String)
case I(Int)
}
let stringSubject = PublishSubject<String>()
let stringObservable = stringSubject.asObservable().map { Container.S($0) }
let intSubject = PublishSubject<Int>()
let intObservable = intSubject.asObservable().map { Container.I($0) }
Observable.of(stringObservable, intObservable).merge()
.subscribeNext { e in
switch e {
case .S(let str):
print("next element is a STRING: \(str)")
case .I(let int):
print("next element is an INT: \(int)")
}
}
.addDisposableTo(disposeBag)
stringSubject.onNext("a")
stringSubject.onNext("b")
intSubject.onNext(1)
intSubject.onNext(2)
stringSubject.onNext("c")
输出:
next元素是STRING:
下一个元素是STRING:b
next元素是INT:1
next元素是INT:2
next元素是STRING:c
至于可以组合Observable
不同类型的s
的其他运算符(如zip
和combineLatest
),没有一个像那样工作merge
。但是,请检查一下。它们可能更适合您的要求。
我正在尝试合并两个不同类型的列表。我得到了两个不同的API响应从改造在一个android应用程序,第一个列表是一个电影列表定义为 公共类列表{ 我通过以下操作成功地从API中检索到列表 然后,我尝试将一个类型列表和一个类型字符串列表组合起来,以创建一个新类ListingAndImage(字符串是一个URL,我将加载到imageview中) 我的问题是,哪种方式最好将这两个列表组合起来,形成一个列表
我有一个特定的任务,就是使用Apache Flink和一些附加逻辑将两个数据流连接到一个聚合中。 基本上我有两个数据流:事件流和所谓的元事件流。我使用Apache Kafka作为消息主干。我试图实现的是根据元事件中给出的信息触发评估的聚合/窗口。基本情况是: 事件的数据流开始发出的记录; 记录基于某个键在某个聚合或窗口中不断累积; 元事件数据流接收一个带有给定键的新,该键还定义了将在事件数据流中发
原文:What’s new in RxSwift 5 作者:freak4pc 译注:在此感谢 freak4pc 为社区所作出的贡献。 RxSwift 5 终于发布了,我(freak4pc)认为这是一个很好的机会,来分享这次发布中最有价值的更新。 别担心,这次发布几乎是向前兼容的,只有少数弃用和重命名的 API。但它还包含了许多改进,我(freak4pc)将在下面详细介绍。 RxRelay 现在是一
我在Cplex中使用Python API来解决一个线性编程问题。使用Cplex时,我的结果如下: 但随后我将LP prolem保存为LP文件,并再次使用Cplex进行求解,结果与第一个略有不同: 下面是我的功能:
我目前正在处理一个与sping-data-neo4j(当前版本)的项目,当我试图将两个类及其属性合并到一个NodeEntity时,我面临一个问题。下面是我的两节课: ... 通过定义用@Index注释的id属性,SDN正在进行合并,而不是插入具有相同索引的多个节点。 我想要实现的是,如果我保存一个Ent1实例,然后保存另一个与Ent1实体具有相同id的Ent2实例,那么结果节点中应该存在两个数据属
我知道重载是在编译时决定的,但当我试图运行下面的示例时,它给出了我无法理解的结果 当我每次运行这个代码片段时,我都会得到“Collection”的输出,这意味着调用参数为Collection的classify方法。 请解释