使用Combine in Swift with removeDuplicated()处理通知有时不缓存通知

使用Combine in Swift with removeDuplicated()处理通知有时不缓存通知,swift,swiftui,combine,Swift,Swiftui,Combine,我无法从默认的通知中心捕获通知。有时它根本没有收到它 代码示例如下: NotificationCenter.default.publisher(for: Notifications.userNotification) .removeDuplicates() .receive(on: DispatchQueue.main) .sink { self.handle(notification: $0) } .store(in: &subscriptions)

我无法从默认的通知中心捕获通知。有时它根本没有收到它

代码示例如下:

NotificationCenter.default.publisher(for: Notifications.userNotification)
    .removeDuplicates()
    .receive(on: DispatchQueue.main)
    .sink { self.handle(notification: $0) }
    .store(in: &subscriptions)
一旦我删除
.removeDuplicates()
行,它就会开始接收所有通知。 问题是:我真的需要这条线吗?这真的有用/重要吗? 我正在搜索
通知中心
.removeDuplicates()
用法的好例子,但找不到任何东西。 有人能解释一下为什么会这样吗

更新


在我的例子中,
通知
用于应用程序内部的导航。它有
userInfo
字典,其中包含如下信息:
[“navigateTo”:“viewControllerTypeShoppingCart”
[“navigateTo”:“viewControllerTypeWishList”]
RemovedUpplicates
从发布者输出中删除(毫不奇怪)重复事件——具体来说,通过
均衡检查的事件(
=

例如,对于
Notification
s,这可能是
Notification
s,具有相同的
Notification.Name
。但是,如果
userInfo
字典不同,平等性测试将失败。例如:

let n = Notification(name: Notification.Name("test"), object: nil, userInfo: ["test":"hi"])
let n2 = Notification(name: Notification.Name("test2"), object: nil, userInfo: ["test":"hi"])
let n3 = Notification(name: Notification.Name("test"), object: nil, userInfo: ["test2":"hi"])
let n4 = Notification(name: Notification.Name("test"), object: nil, userInfo: nil)
let n5 = Notification(name: Notification.Name("test"), object: nil, userInfo: nil)
print("Equal?", n == n2, n == n3, n4 == n5)
结果:

Equal? false false true
您不会列出任何有关您正在接收的
通知类型的信息,但如果它是,例如,在没有包含不同信息的
userInfo
字典的情况下发生的事件,您将错过任何重复的事件,因为它们看起来像重复的事件

有帮助吗?这取决于您的用例。重要吗?同样的事情?
在您的情况下,如果
removeDuplicates
导致不良行为,您应该将其删除。

谢谢您的回答。在我的例子中,通知用于导航到不同的ViewController。userInfo字典包含不同的值,但有时它具有相同的值,因为例如,用户导航到同一视图控制器两次或更多次。我已更新了我的问题。确定。我不确定这是否会改变我的答案。