swift - RxSwift 从一个 Observable 更新多个变量

标签 swift struct observable rx-swift frp

具有从 View 和其他类更新的多个变量的结构

struct MyViewViewModel  {
    let style: Variable<CustomEnum> = Variable(.value1)
    let displayedValue: Variable<String> = Variable("")
    let stepIndex = Variable(0)
    let startedDate: Date

    var disposeBag = DisposeBag()
}

样式 - 从第 3rt 部分类更新

stepIndex - 应从 View 的 CocoaAction 更新,并取决于 style 更改(重置)

displayedValue - 取决于 style + stepIndex + startedDate

init(style: Observable<CustomEnum>, startedDate: Date) {
    self.startedDate = startedDate

    style
        .bind(to: self.style)
        .disposed(by: disposeBag)

    self.style.asObservable()
        .map { _ in return 0 }
        .bind(to: stepIndex)
        .disposed(by: disposeBag)

    self.style.asObservable()
        .map { return self.string(for: $0) } //error: Closure cannot implicitly capture a mutating self parameter
        .bind(to: displayedValue)
        .disposed(by: disposeBag)
}


mutating func string(for type: CustomEnum) -> String {
    return "\(self.stepIndex.value) + \(type) + \(self.startedDate.day)"
}

主要问题如何首先处理stepIndex变量以及更新startedDate值之后。

我不想使用类而不是结构,我不确定是否需要它(以避免保留循环)。 RxSwift 应该有办法摆脱这个。

最佳答案

简短的回答是你不能。需要在初始化时设置日期,但步骤索引流以异步方式发出值...

让这个工作如我所见的唯一方法是将 startDate 设为 var Date?。

关于swift - RxSwift 从一个 Observable 更新多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46707198/

相关文章:

ios - 如果某种类型在 swift 中传递给函数,则尝试返回 nil

ios - 如何快速访问存储在另一个应用程序中的声音文件?

Angular 表单提交仅包含更改的字段 - 而不是完整的表单值

android - 图像未使用 Rx Observable 和 Retrofit2 加载 Picasso

javascript - Angular 6 observables - 从 .subscribe() 函数中提取数据并在别处使用

ios - 将 [Float] 转换为 [CGFloat] 的快速方法?

swift - 哪些 Emoji 字符用作 Swift 标识符?

c - 如何在失败的 realloc 中释放 malloc

c - 将数组中的值分配给结构数组

c - 为什么这个 C 结构体代码可以工作?