我ModelView-ViewModel
在我目前正在工作和使用的项目中使用RxSwift
, RxBlocking
& RxTests
。目前我正在尝试测试 ViewModel,但在解决这个问题时遇到了很多麻烦。
所以可以说我有一个ExampleViewModel
适合我的ExampleViewController
. 我ExampleViewModel
期待一个流,它是来自 的两个流Observable
的组合 ( ) ,一个是 textField 要么是焦点,另一个是文本流;所以像。根据是否聚焦和字符串的上下文,my将向其内部公开的属性发出一个事件,该属性是backgroundColor的状态;.combineLatest
UITextField
Observable<(Bool, String)>
ExampleViewModel
Observable
UITextField
Observable<UIColor>
ExampleViewModel.swift
:
class ExampleViewModel {
private let disposeBag = DisposeBag()
private let _textFieldColor: PublishSubject<UIColor>
var textFieldColor: Observable<UIColor> { get { return self._textFieldColor.asObservable() } }
init(textFieldObservable: Observable<(Bool, String)>) {
textFieldObservable.subscribeNext { (focus, text) in
self.validateTextField(focus, text: text)
}.addDisposableTo(self.disposeBag)
}
func validateTextField(focus: Bool, text: String) {
if !focus && !text.isEmpty {
self._textFieldColor.onNext(UIColor.whiteColor())
} else {
self._textFieldColor.onNext(UIColor.redColor())
}
}
}
(对不起,我不知道如何正确格式化)
基本上我想测试这个类并通过控制焦点和文本输入来ExampleViewModel
测试它是否发出正确的信号。UIColor
谢谢