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