【发布时间】:2020-09-09 19:52:32
【问题描述】:
我有一个CurrentValueSubject,它是ChatModelFirebase 的数组。我想要做的是删除所有具有“已取消”状态字段的ChatModelFirebase 模型。问题是当我应用 .filter(..) 运算符时,它作用于整个数组而不是单个项目。
var chatFirebaseModels: CurrentValueSubject<[ChatModelFirebase], Never> = CurrentValueSubject([])
chatFirebaseModels
.filter({ (chatModelFireBaseArray) -> Bool in
// I want individual array items, not chatModelFireBaseArray
return false
})
下面是代码完成的样子:
您可以看到.filter(..) 被应用于[ChatModelFirebase] 数组,而不是单个ChatModelFirebase 模型。
这里的答案是否只使用.flatMap(..)?我很好奇是否有正确的方式使用.filter(...),因此我提出了问题。
【问题讨论】:
-
这取决于,您是否要将数组和过滤器元素保留在自己的数组中? -> 使用
.map { $0.filter { ...} }。想要过滤所有单个元素? -> 使用flatMap { $0 }.filter { ... }。 -
我不确定我是否理解你的问题。目标是删除数组中与某个布尔条件不匹配的一些项目。
-
我的问题是关于你的映射+过滤的结果。你想以
[ChatModelFirebase]结束(就像你在问题中建议自己使用平面地图)还是[[ChatModelFirebase]](地图+过滤器)。从某种意义上说,这两种方式都是“正确的”,它们最终实现了相同的效果,但结果类型会有所不同。 -
哦,我明白了。只想得到一系列模型,即
[ChatModelFirebase]。