使用示例
LiveData操作符可以将一个LiveData转换为另一个LiveData
当源LiveData发生变更时,会自动通知目标LiveData
val srcLiveData : LiveData<T>val dstLiveData : LiveData<R>dstLiveData = srcLiveData.distinctUntilChanged().switchMap{return@switchMap LiveData<R>}.map{return@map R}
操作符原理
LiveData操作符会生成一个MediatorLiveData
MediatorLiveData会订阅上游SourceLiveData,经过一系列的数据处理和转换工作后,再将新数据发布给自己的订阅者
distinctUntilChanged操作符
收到重复数据时,不转发给下游,这里的重复是通过equals方法来判断的
switchMap操作符
收到上游数据时,生成一个新的LiveData,并订阅新的LiveData
并且,switchMap在订阅新的LiveData之前,会解除对旧LiveData的订阅
map操作符
收到上游数据时,转换成新的数据格式,并发布给下游订阅者