在RxSwift中访问内部Observable的最佳方法是什么?

时间:2018-01-28 13:25:40

标签: swift rx-swift

所以我有一个AddToDoViewModelInput对象存储多个Observable<T>值。我希望能够一次访问所有可观察值,以便我可以将其内容复制到AddItemViewControllerProperties对象中。该对象存储不可观察的数据。该对象最终将转换为AddToDoViewModelOutput对象。基本上我有:

AddToDoViewModelInput -> AddItemViewControllerProperties -> AddToDoViewModelOutput

AddToDoViewModelInputAddToDoViewModelOutput对象包含可观察对象,而AddItemViewControllerProperties不包含可观察对象。

目前,我正在使用combineLatest来组合AddToDoViewModelInput内的可观察对象,并在我传递给combineLatest的闭包中创建一个AddItemViewControllerProperties对象并将其返回。 / p>

我不确定以这种方式使用combineLatest是否正确。我想我记得combineLatest会在任何的observable发出事件时触发,所以在我的情况下这可能不是我想要的。 我是否可以遵循现有的模式或最佳实践来正确实现这一点?

let disposeBag = DisposeBag()

struct AddToDoViewModelInput {
    let day: Observable<Int>
    let name: Observable<String>
}

struct AddItemViewControllerProperties {
    let dayOfTheWeek: Int?
    let name: String
}

struct AddToDoViewModelOutput {
    let message: Observable<String>
}

let input = AddToDoViewModelInput(
    day: Observable.of(2),
    name: Observable.of("Tuesday")
)

let propertiesObs: Observable<AddItemViewControllerProperties> = 
  Observable.combineLatest(input.name, input.day)
{
    (name, day) in
    return AddItemViewControllerProperties(dayOfTheWeek: day, name: name)
}

let messageObs: Observable<String> = propertiesObs.map{ properties in
    return "For day #\(properties.dayOfTheWeek!) the name is \(properties.name)"
}

messageObs
    .debug("messageObs")
    .subscribe(onNext: { message in print(message) })
    .disposed(by: disposeBag)

let output = AddToDoViewModelOutput(message: messageObs)
}

0 个答案:

没有答案