- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个发布者需要在日期更改时重新评估,但应该在任何其他时间继续发出值。
因此,我想我可以为 UIApplication.significantTimeChangeNotification
通知使用一个 NotificationCenter
发布者,并将它与我的发布者结合起来,这样结合发射过程就会重新运行在数据更改或日期更改时重新评估 map 过滤器。请参阅下面该代码的粗略概述。
问题是在设置时 NotificationCenter
没有发布事件,因此,以下 map
等调用都没有实际评估。 merge(with:)
不会工作,因为两个发布者发布不同的类型,但是 combineLatest(_:)
和 zip(_:)
在两个发布者都发出一个事件之前,它们都不会发出事件。
我可以通过在此代码之后添加 NotificationCenter.default.post(name: UIApplication.significantTimeChangeNotification, object: nil)
来验证我的代码是否按预期运行,但这是不可取的,因为它可能发出信号实际时间发生变化的应用程序的其他区域,但实际时间并未发生变化
private func todaysDate() -> String {
let formatter = DateFormatter()
formatter.dateFormat = "YYYY-MM-dd"
return formatter.string(from: Date())
}
@Published var entities: [MyEntity]
let dayChangePublisher = NotificationCenter.default
.publisher(for: UIApplication.significantTimeChangeNotification)
$entities.combineLatest(dayChangePublisher)
.map(\.0) // Only pass on the entity for further operations
.map { entities -> MyEntity? in
let today = todaysDate()
return entities?.first(where: { $0.id == today })
}
...remainder of combine code
当前的 Swift 组合框架能否实现发布者和事件评估的这种组合?就像我期望 merge(with:)
的行为一样,但是发布者发出两种不同的类型。
编辑:我找到了一个解决方案,我将通知发布者映射到一个 nil 数组
let dayChangePublisher = NotificationCenter.default
.publisher(for: UIApplication.significantTimeChangeNotification)
.map { _ ➝ [MyEntity]? in
return nil
}
然后使用merge
和compactMap
来避免传递任何nil 值
let mergedPub = repo.$entities
.merge(with: dayChangePublisher)
.compactMap { entity -> MyEntity? in
let today = todaysDate()
return entities?.first { $0.id == today }
}
.share()
它有效,但如果有人有更好的解决方案,可能会有点麻烦?
最佳答案
如果我理解你的问题,你需要一个 combineLatest
,它不会因为没有来自发布者之一的初始值而被阻止。
您可以使用 .prepend(value)
运算符来实现。在这种情况下,由于您不关心实际值,因此首先映射到 Void
,然后在前面添加一个 Void
。它会像这样工作:
let dayChangePublisher = NotificationCenter.default
.publisher(for: UIApplication.significantTimeChangeNotification)
$entities.combineLatest(
dayChangePublisher
.map { _ in }
.prepend(()) // make sure to prepend a () value
)
.map(\.0) // Only pass on the entity for further operations
.map { entities -> MyEntity? in
let today = todaysDate()
return entities?.first(where: { $0.id == today })
}
//...
关于Swift 合并尚未发送值的发布者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66075000/
我想使用 Java 实现各种发布者/订阅者模式,但目前没有想法。 有 1 个发布者和 N 个订阅者,发布者发布对象,然后每个订阅者需要按照正确的顺序处理每个对象一次且仅一次。发布者和每个订阅者在自己的
我正在学习发布者/订阅者模式,并做了一个简单的例子来更好地理解它。 var Publisher = { subscribers: {}, Subscribe: functi
这是我目前挂断的一般设计问题。它导致了一些心理代码块......如果它只是一个常见的陷阱,我不想继续这样,但如果它被接受使用,我想继续,因为代码非常干净并且解耦(除了横切消息)。 我在代码中有一个基于
当我打开安装程序(使用NSIS创建)时,会出现UAC对话框,其中包含有关安装程序的信息。字段发布者为“未知”。我听说过对应用程序进行数字签名,您知道如何在NSIS中执行此操作吗? 如何将字段/属性发布
我正在使用具有 DefaultMessageListenerContainer 的 pub/sub 模型。我已将并发消费者配置为 5 个。如何唯一标识每个消费者? 我试图将相应监听器处理的每个事件存储
我想创建一个可以从不同线程调用的 RabbitMQ 发布者。 根据 RabbitMQ 最佳实践,我不应允许在不同线程中使用同一 channel ,因此在发布者的多个实例中共享此 channel 将导致
是否可以仅通过使用事件(即不是列表或字典)在 WCF 中实现发布者/订阅者模型? 如果是,请向我提供示例应用程序的网络链接,或任何讨论此问题的文章。 最佳答案 是的。 Here是一篇关于它的 MSDN
我使用 rosjava 作为订阅者和 rospy 作为发布者实现了发布/订阅。但是,我没有收到 rospy 的任何消息。我在这里错过了什么吗? JAVA 订阅者(假设 IP 为:1.1.1.1) pu
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在尝试签署一个小程序,这样发布者就不会显示为“未知”: 我为一个组织工作,我们有我们自己的证书颁发机构,证书链如下:ORG Root CA > ORG Trusted Certification
这是对我尝试使用 combine 实现的目标的过度简化。 如果发生某些事情,我需要向共享发布者注入(inject)一个值。 在这里您可以看到,如果 map 接收到数字 2,我使用原始发布者上的发送命令
我们有以下使用 .NET RabbitMQ 库的场景: 工作线程从队列中获取“请求”消息,并将它们分派(dispatch)到多个工作线程上进行处理。完成后,每个工作线程都会发送另一条消息。 我的问题是
当我将一些 Objective-C 代码移植到 Swift 时,我试图更好地理解新的 Combine 框架以及我如何使用它来重新创建一个通用的设计模式。 在这种情况下,设计模式是单个对象(管理器、服务
我有一个基本的 ZeroMQ 场景,由两个发布者和一个订阅者组成。在我决定将局域网内不同计算机上的所有进程分开之前,这在本地计算机上一直运行良好。这就是我创建 ZeroMQ 套接字的方式(简化的 Py
我目前正在尝试使用 0MQ 创建代理。我想订阅一个不在 0MQ 下运行的发布者。我的意思是我有发送 XML 文件的远程发布者的地址和端口,我想获取该文件。不幸的是,我没有收到发布者的任何消息,但它发送
我尝试使用 C++ 在 ZeroMQ 中开发发布者订阅者模型,我从 JSON 文件中提取对象值并将其发送到另一端。 我的订户部分运行良好,但出现任何错误。但是我在发布者部分面临以下错误:(在 if 语
我问过 Google 并搜索过 NServiceBus 网站和论坛,但我似乎找不到任何关于如何编写 Java 应用程序来订阅发布者的说明性指导。有没有人有任何这样的联系或经验? 最佳答案 这种情况并没
有谁知道如何使用 CruiseControl.Net 发布到 FTP 服务器? 最佳答案 我认为没有特定的方法可以做到这一点。您当然可以始终在 cruise control.net 的窗口中运行命令行
我正在尝试使用Ocelot在ASP.Net API网关中使用JWT承载身份验证,以与多个授权机构/发行者一起工作。一个颁发者是Auth0,另一个是基于IdentityServer4的内部身份验证服务器
如何删除 Visual Studio Marketplace 发布者? 在 https://marketplace.visualstudio.com/manage/publishers/ 上查看我的帐
我是一名优秀的程序员,十分优秀!