我有一个简单的ViewModel:
struct ViewModel {
var someText = Variable<String>("")
func foo() -> Observable<String> {
return someText.asObservable()
}
}
在ViewController中,viewModel是实例变量,someTextField是一个正确连接IBOutlet的UITextField
var viewModel = ViewModel()
@IBOutlet weak var someTextField: UITextField!
然后在ViewController的viewDidLoad()中,我进行了设置并执行以下操作:
someTextField.rx.text.map { $0 ?? "" }.bind(to: viewModel.someText)
let disposeBag = DisposeBag()
let observable = viewMode.foo()
observable.subscribe(onNext: { data in
print(data)
}, onError: { error in
print(error)
}, onCompleted: {
print ("complete")
}, onDisposed: {
print("disposed")
}).disposed(by: disposeBag)
当我在文本字段中输入字符时,我希望print()打印出这些字符。但是print()只在调试器中调用一次(当文本字段接收输入时不会随后调用)
有什么问题?
答案 0 :(得分:2)
您必须将disposeBag
保留在上下文之外,someTextField.rx.text.map { $0 ?? "" }.bind(to: viewModel.someText)
应为disposed(by: disposeBag)
。