![](/img/trans.png)
[英]RxSwift calling bind fires immediately vs subscribe(onNext: )
[英]Rxswift observable bind(to:) vs subscribe(onNext:)
抱歉。 我很困惑Rxswift中的绑定是什么。 据我所知,除非观察者订阅了它,否则observable
不会产生价值,例如myObservable.subscribe(onNext: {})
。
但是当我阅读以下代码行时:
// in LoginViewModel.swift
init() {
isValid = Observable.combineLatest(username.asObservable(), password.asObservable()) { (username, password) in
return !username.isEmpty && !password.isEmpty
}
}
// in LoginViewController.swift
viewModel.isValid.bind(to: loginButton.rx.isEnabled).disposed(by: disposeBag)
我在这里很困惑为什么可以在不调用subscribe
方法的情况下观察到isValid
Observable?
为什么我们可以在LoginViewController.swift
调用bind(to :)而不调用viewModel.isValid.subscribe(...)
类的东西
看看bind(to: )
:)的实现
public func bind<O: ObserverType>(to observer: O) -> Disposable where O.E == E {
return self.subscribe(observer)
}
订阅在里面调用。
关于你的陈述
据我所知,除非观察者订阅,否则观察不会产生价值
这仅适用于寒冷的观察者。 让我引用RxSwift文档
Observable何时开始发出其物品序列? 这取决于Observable。 “热”Observable可以在创建项目后立即开始发出项目,因此任何后来订阅该Observable的观察者都可以开始在中间某处观察序列。 另一方面,“冷”Observable等待观察者在开始发射物品之前订阅它,因此这样的观察者保证从一开始就看到整个序列。
由于我偶然发现了这个问题,试图理解这两者之间的区别,我想为bind
添加它:
如果在调试模式下发生错误,将引发
fatalError
。
如果在发布模式下发生error
将记录error
。
subscribe(onNext:
的方法不同 subscribe(onNext:
允许显式处理onError:
使用自定义处理( onCompleted
onDisposed
相同)。
由于@chriswillow已经回答了 bind
和subscribe(onNext:
do subscribe to observable。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.