【发布时间】:2020-12-18 08:23:16
【问题描述】:
我有一个发布者,它发出一个可选的输出类型。如果输出不是nil,我需要flatMap 到一个新的发布者,或者如果它是nil,则回退到一个空的发布者。
例如:
[1, nil, 5].publisher // Generic parameter 'T' could not be inferred
.flatMap {
$0?.someNewPublisher ?? Empty(completeImmediately: false)
}
[1, nil, 5].publisher
.map {
$0?.someNewPublisher
}
.replaceNil(with: Empty(completeImmediately: false)) // Generic parameter 'Failure' could not be inferred
.flatMap { $0 }
我想知道我是否试图以错误的方式解决这个问题。需要明确的是,在映射之前过滤 nil 不会解决我的问题,因为这不会将当前发布者替换为空发布者(我将继续接收我不应再接收的元素)。
【问题讨论】:
-
将
eraseToAnyPublisher添加到您的第一个代码 sn-p 有效。 -
我已经尝试过了,但它不起作用。您可以发布您的答案,以显示您要使用它的确切含义吗?你的意思有点模棱两可。
-
Charles Maria 的回答实际上要好得多。哦,组合单子的力量:)
标签: ios swift reactive-programming combine