繁体   English   中英

Rxswift observable bind(to :) 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已经回答 bindsubscribe(onNext: do subscribe to observable。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM