NotificationCenter.Publisher VS PassThroughSubject

时间:2019-09-07 12:55:25

标签: swift combine

我有一个要发送给多个侦听器/订阅者的对象,因此我检查了Combine,发现了两种不同类型的发布者,即/Users/subkundu/Desktop/Work/Projects/React/ownerstown/node_modules/@firebase/messaging/index.ts:75 if (self && 'ServiceWorkerGlobalScope' in self) { ^ ReferenceError: self is not defined NotificationCenter.Publisher。我很困惑,为什么有人会在PassThroughSubject上使用NotificationCenter.Publisher

我想出了下面的代码,演示了两种方法。总结一下:

  • PassThroughSubject必须具有NotificationCenter.Publisher静态属性
  • 类型安全不是真的(因为我可以为同一Notification.Name发布不同类型的对象/为同一Notification.Name发布不同的对象)
  • 发布新值需要在Notification.Name(而不是发布者本身)上完成
  • NotificationCenter.default闭包中显式转换为使用的类型

在什么情况下,有人会在map上使用NotificationCenter.Publisher

PassThroughSubject

2 个答案:

答案 0 :(得分:3)

如果您必须使用使用NotificationCenter的第三方框架。

答案 1 :(得分:0)

NotificationCenter可以被认为是第一代消息传递系统,而Combine是第二代。它具有运行时开销,并且需要强制转换可以存储在Notification s中的对象。就个人而言,在构建iOS 13框架时,我永远不会使用NotificationCenter,但是您确实需要使用它来访问仅在此处发布的许多iOS通知。基本上,在我的个人项目中,除非绝对必要,否则我将其视为只读。