arrays - 不同类型的 RxSwift 变量数组

标签 arrays swift generics rx-swift

我正在尝试定义一个不同类型(Int、String、Bool、String?等...)的 Rxswift 变量数组

所以从技术上讲,我想要这样的东西,

var intVariable = Variable<Int>(10)
var stringVariable = Variable<String>("Hello, RxSwift")
let genericArray = [intVariable, stringVariable]

这样做的原因是,我有一个我想要订阅的变量列表。

但是,我可以单独订阅变量,例如 intVariable.asObservable().subscribe , stringVariable.asObservable().subscribe等等。 但如果它在一个数组中,我可以遍历所有元素并订阅它。

Rxswift 变量定义为 public final class Variable<Element>

P.S 我试过类型删除但没有成功。如有任何帮助,我们将不胜感激!

最佳答案

你在这里做什么完全取决于 subscribe 闭包的样子。如果您对任一变量中的每个项目都做同样的事情,无论类型如何,那么只需将它们映射到相同的类型:

let bag = DisposeBag()
let intVariable = Variable<Int>(10)
let stringVariable = Variable<String>("Hello, RxSwift")
let genericArray = Observable.merge([intVariable.asObservable().map { "\($0)" }, stringVariable.asObservable()])
genericArray.subscribe(onNext: { print($0) }).disposed(by: bag)
intVariable.value = 5
stringVariable.value = "Goodby, RxSwift"

打印:

10
Hello, RxSwift
5
Goodby, RxSwift

如果您以某种方式组合这两项,您需要每个变量的最新发射并且您需要保留类型信息,那么请执行以下操作:

let genericArray = Observable.combineLatest(intVariable.asObservable(), stringVariable.asObservable())

打印:

(10, "Hello, RxSwift")
(5, "Hello, RxSwift")
(5, "Goodby, RxSwift")

如果您只想在从两个变量发出新元素时触发您的订阅,那么:

let genericArray = Observable.zip(intVariable.asObservable(), stringVariable.asObservable())

打印:

(10, "Hello, RxSwift")
(5, "Goodby, RxSwift")

我会避免 ( RxSwift merge different kind of Observables ) 中提到的解决方案

关于arrays - 不同类型的 RxSwift 变量数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43750090/

相关文章:

c# - 如何将列表框中的所选项目添加到列表 <string> 在 C# 中

ios - Swift 3 遍历类数组

arrays - 显示数据时出现整数数组错误

Scala 从 DSL 到函数的自然转换

java - 泛型参数的实例

没有指定类型的 C# nameof 泛型类型

c++ - 如何在 C++ 中将输入字符串转换为数组?

javascript - 如何在 JavaScript 中拆分变量?

arrays - 如何在 Excel 公式中创建可变长度数组?

swift - 安装 xcode 10 后找不到伞头 'realm.h'