如何在Swift Combine中的数组CurrentValueSubject的单个元素上应用.filter运算符?

如何在Swift Combine中的数组CurrentValueSubject的单个元素上应用.filter运算符?,swift,swift5,combine,Swift,Swift5,Combine,我有一个CurrentValueSubject,它是ChatModelFirebase的数组。我要做的是删除状态字段为Cancelled的所有ChatModelFirebase模型。问题是,当我应用.filter。。运算符它作用于整个数组,而不是单个项 var chatFirebaseModels: CurrentValueSubject<[ChatModelFirebase], Never> = CurrentValueSubject([]) chatFirebaseModels

我有一个CurrentValueSubject,它是ChatModelFirebase的数组。我要做的是删除状态字段为Cancelled的所有ChatModelFirebase模型。问题是,当我应用.filter。。运算符它作用于整个数组,而不是单个项

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

chatFirebaseModels
    .filter({ (chatModelFireBaseArray) -> Bool in
        // I want individual array items, not chatModelFireBaseArray
        return false
    })
下面是代码完成的样子:

你可以看到。过滤器。。正在应用于[ChatModelFirebase]阵列,而不是单个ChatModelFirebase模型

这里的答案就是使用.flatMap。。?我很好奇是否有正确的方法使用.filter…,因此我提出了一个问题。

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

chatFirebaseModels
    .map { array in
       array.filter { element in
          // ... filter by element
       }
    }
或者使用纯粹的联合收割机链条,看起来不必要的复杂:

chatFirebaseModels
   .flatMap { Publishers.Sequence(sequence: $0) }
   .filter { element in
      // ... filter by element
   }
   .collect()
您可以使用.map返回过滤后的数组:

chatFirebaseModels
    .map { array in
       array.filter { element in
          // ... filter by element
       }
    }
或者使用纯粹的联合收割机链条,看起来不必要的复杂:

chatFirebaseModels
   .flatMap { Publishers.Sequence(sequence: $0) }
   .filter { element in
      // ... filter by element
   }
   .collect()

视情况而定,是否要将数组和筛选器元素保留在它们自己的数组中?->使用.map{$0.filter{…}。要过滤所有行业元素吗?->使用平面图{$0}。过滤器{…}。我不确定是否理解您的问题。目标是删除数组中与特定布尔条件不匹配的某些项。我的问题是关于映射+筛选的结果。您是否希望使用flatmap或[[ChatModelFirebase]]map+filter以[ChatModelFirebase]结束,就像您在问题中建议的那样。从某种意义上说,这两种方法都是正确的,它们最终实现了相同的功能,但最终的类型会有所不同。哦,我明白了。只想得到一个模型数组,即[ChatModelFirebase]。这取决于情况,是否要将数组和筛选器元素保留在它们自己的数组中?->使用.map{$0.filter{…}。要过滤所有行业元素吗?->使用平面图{$0}。过滤器{…}。我不确定是否理解您的问题。目标是删除数组中与特定布尔条件不匹配的某些项。我的问题是关于映射+筛选的结果。您是否希望使用flatmap或[[ChatModelFirebase]]map+filter以[ChatModelFirebase]结束,就像您在问题中建议的那样。从某种意义上说,这两种方法都是正确的,它们最终实现了相同的功能,但最终的类型会有所不同。哦,我明白了。我们只想得到一系列模型,即[ChatModelFirebase]。