为啥 `NotificationCenter+Rx` 在 RxCocoa 而不是 RxSwift

Posted

技术标签:

【中文标题】为啥 `NotificationCenter+Rx` 在 RxCocoa 而不是 RxSwift【英文标题】:Why `NotificationCenter+Rx` is in RxCocoa not RxSwift为什么 `NotificationCenter+Rx` 在 RxCocoa 而不是 RxSwift 【发布时间】:2018-05-23 00:40:38 【问题描述】:

因为NotificationCenter 是Foundation 的一部分。我希望它应该在 RxSwift 中,而不是在 RxCocoa 中。

但是为什么NotificationCenter+Rx 在 RxCocoa 中呢?这背后有什么原因吗?

在我们的一些项目中,我们只使用 RxSwift 而没有 RxCocoa。如果我们使用NotificationCenter.default.rx.notification,我们将得到错误Value of type 'Reactive<NotificationCenter>' has no member 'notification',因为NotificationCenter+Rx 仅在RxCocoa 中。

【问题讨论】:

据我所知,RxSwift 只实现了 Swift 标准库中类型的 observable 属性,不包括 Foundation。 @Palle 好电话,我认为 RxSwift 的目标是针对独立于平台的 Swift。 Foundation 不适用于 Linux 等非 Apple 平台。 【参考方案1】:

简单的答案是 - RxSwift、RxJava 等是ReactiveX.io 标准的平台无关实现,例如- Observables、Operators、Subjects 等。

虽然平台特定的东西是平台特定的;-) 在我们的例子中,RxCocoa 涵盖了与其他非 Cocoa 平台无关的 NotificationCenter。

【讨论】:

感谢@shai-mishali,因为 RxSwift 可以在非 Apple 平台上运行,我认为在 RxCocoa 中制作它是可以的。如果可能的话,我想将 Foundation 和 UIKit 分开。我现在把它标记为答案,希望能帮助其他有同样问题的人。

以上是关于为啥 `NotificationCenter+Rx` 在 RxCocoa 而不是 RxSwift的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 onNext 没有触发我的 rx 订阅?

继承 NotificationCenter 的优点和缺点

Swift 学习之 NotificationCenter

大神求助.Qt串口单片机通信接收到的为啥是乱

声明 NotificationCenter.default.addObserver [swift]

没有这样的模块错误“NotificationCenter”WatchOS,Swift