RxSwift变量(行为主题)不发出信号

时间:2017-12-19 13:20:30

标签: swift rx-swift rx-cocoa

我有一个简单的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()只在调试器中调用一次(当文本字段接收输入时不会随后调用)

有什么问题?

1 个答案:

答案 0 :(得分:2)

您必须将disposeBag保留在上下文之外,someTextField.rx.text.map { $0 ?? "" }.bind(to: viewModel.someText)应为disposed(by: disposeBag)

相关问题