gpt4 book ai didi

rx-swift - RxSwift : Convert Observable to a Variable

转载 作者:行者123 更新时间:2023-12-02 08:06:59 26 4
gpt4 key购买 nike

如何将 Int 类型的 Observable 转换为 Int 类型的变量?

这是我迄今为止尝试过的:

let obs: Observable<Int> = Observable.of(4)

let variable: Variable<Int> = obs
.flatMap { num in
return Variable<Int>(num)
}

使用 flatMap 感觉是进行转换的最合乎逻辑的方式,但是,我收到一个编译器错误,基本上说它不喜欢 flatMap 返回任何不可观察的东西。有什么想法吗?

编辑:

只是为了说明为什么我需要将 Observable 转换为变量:

我需要我的 viewModel 来驱动 ViewController 中的 UIPickerView。目前,我的 ViewModel 中有两个公开的属性,项目:Observable<[String]>(它是 UIPickerView 的数据源)和 selectedIndex:Variable。 selectedIndex 将驱动 UIPickerView 的初始值,但也会跟踪用户所做的任何更改。

我需要从 Observable 转换为 Variable 的原因是我需要弄清楚最初应该选择 UIPickerView 的哪个索引:

items.map { days -> Int in
if let index = days.index(where: { str in
return str == selectedDay
}) {
return index
}
return 0
}
.flatMap { num in
return Variable<Int>(num)
}

我现在想知道我是否过于复杂了,是否应该只使用 Observable 来代替变量。

最佳答案

这里有几点:

首先,您应该使用已弃用的 Variable(可能会在 Swift 5 中完全弃用)。请查看 BehaviorSubjectBehaviorRelay

关于您的问题,我不确定让 Variable 等于 Observable 的用例是什么,所以我有两种不同的想法:

  1. 您可以将 Observable 绑定(bind)到变量/主题/中继(例如 observable.bind(to: variable))
  2. 您实际上可以反过来从变量 获取 Observable,这可能更有意义。例如variable.asObservable()

关于rx-swift - RxSwift : Convert Observable to a Variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50551309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com