【发布时间】:2018-01-24 14:59:51
【问题描述】:
因此,在iOS 开发中,我使用ReactiveCocoa,并且通过该框架,我能够观察多个NSObjects 并将它们组合成一个返回a 值的signal。像这样的:
-(RACSignal *)modelIsValidSignal {
return [RACSignal combineLatest:@[RACObserve(self,username), RACObserve(self,password), RACObserve(self, busyLoggingIn)]
reduce:^id(NSString *username, NSString *password, NSNumber *busyLoggingIn) {
return @((username.length > 0) && (password.length > 0 && busyLoggingIn.boolValue == NO));
}];
}
因此,这将返回一个 boolean,它要么为假要么为真。一旦其中一个对象状态发生变化,就会通知该信号,然后subscriber (Observer) 将获得该布尔值的当前值。
如何使用LiveData 做类似的事情?最接近这样做的是MediatorLiveData,但是我不知道如何同时观察多个LiveData 事件然后减少它,就像上面的例子一样。
【问题讨论】:
-
LiveData专为相当简单的场景而设计。如果你需要这样的东西,请使用 RxJava。 -
我有点担心将 RxJava 加入其中;因为我试图摆脱对第三部分库的依赖。那么,您是说 LiveData 不可能做到这一点?
-
“我正在尝试减少对第三部分库的依赖”——
LiveData来自一个库。所有的 Android 开发都依赖于库。几乎所有现代软件开发都依赖于库。 “所以,你是说 LiveData 不可能做到这一点?” - 没有什么“开箱即用”可以做到这一点。MediatorLiveData支持 N 个源,因此您可以进行所需的转换。我的观点是,谷歌已经表明 RxJava 是复杂反应流的答案。
标签: java android ios objective-c android-livedata