如何将 .filter 运算符应用于 Swift Combine 中的数组 CurrentValueSubject 的各个元素?

Zor*_*ayr 2 swift swift5 combine

我有一个CurrentValueSubject这是一个数组ChatModelFirebase。我想要做的是删除所有ChatModelFirebase状态字段为“已取消”的模型。问题是,当我应用.filter(..)运算符时,它作用于整个数组而不是单个项目。

var chatFirebaseModels: CurrentValueSubject<[ChatModelFirebase], Never> = CurrentValueSubject([])

chatFirebaseModels
    .filter({ (chatModelFireBaseArray) -> Bool in
        // I want individual array items, not chatModelFireBaseArray
        return false
    })
Run Code Online (Sandbox Code Playgroud)

下面是代码完成的样子:

在此处输入图片说明

您可以看到它.filter(..)应用于[ChatModelFirebase]数组而不是单个ChatModelFirebase模型。

这里的答案只是使用.flatMap(..)吗?我很好奇是否有正确的使用方法.filter(...),因此我的问题。

New*_*Dev 6

您可以使用.map返回过滤后的数组:

chatFirebaseModels
    .map { array in
       array.filter { element in
          // ... filter by element
       }
    }
Run Code Online (Sandbox Code Playgroud)

或者使用纯组合链(尽管看起来不必要地复杂):

chatFirebaseModels
   .flatMap { Publishers.Sequence(sequence: $0) }
   .filter { element in
      // ... filter by element
   }
   .collect()
Run Code Online (Sandbox Code Playgroud)