如何将Int类型的Observable转换为Int?类型的变量?
这是我到目前为止所尝试的内容:
function getRandomArray() {
return [
[3, "You find " + roll(1, 10) + " dollars."],
[5, "You find " + roll(1, 20) + " dollars."],
[9, "You find " + roll(1, 30) + " dollars."]
];
}
console.log(getRandomArray());
console.log(getRandomArray());
使用flatMap感觉是进行转换的最合理的方式,但是,我得到一个编译器错误,实际上它说它不喜欢flatMap返回任何不可观察的东西。有什么想法吗?
编辑:
只是给出一些关于为什么我需要将Observable转换为变量的上下文:
我需要我的viewModel来驱动ViewController中的UIPickerView。目前,我在ViewModel中有两个公开的属性,项目:Observable< [String]> (这是UIPickerView的数据源)和selectedIndex:Variable。 selectedIndex将驱动UIPickerView的初始值,但也会跟踪用户所做的任何更改。
我需要从Observable转换为Variable的原因是我需要弄清楚最初应该选择UIPickerView的哪个索引:
let obs: Observable<Int> = Observable.of(4)
let variable: Variable<Int> = obs
.flatMap { num in
return Variable<Int>(num)
}
我现在想知道我是否过于复杂化,如果不是我的变量应该只有一个Observable。
答案 0 :(得分:3)
这里有几点:
首先,你应该不使用Variable
,因为它已被弃用(可能在Swift 5中完全弃用)。请改为BehaviorSubject
和BehaviorRelay
。
关于你的问题,我不确定Variable
等于Observable的用例是什么,所以我有两种不同的想法:
observable.bind(to: variable)
)variable.asObservable()