For loop 在RxSwift中迭代并添加到数组

For loop 在RxSwift中迭代并添加到数组,for-loop,iteration,rx-swift,For Loop,Iteration,Rx Swift,我提出了一个网络请求,从中我得到了一群用户,我还得到了一个emailDetails对象,该对象也包含userId属性。我试图迭代来自网络请求的用户,以匹配来自emailDetails的所有用户ID 我不确定如何迭代,我知道RxSwift中存在枚举 self.emailRecipients = networkRequestToGetUser .asObservable() .map { users in users.filter {$0.userId

我提出了一个网络请求,从中我得到了一群用户,我还得到了一个emailDetails对象,该对象也包含userId属性。我试图迭代来自网络请求的用户,以匹配来自emailDetails的所有用户ID

我不确定如何迭代,我知道RxSwift中存在枚举

self.emailRecipients = networkRequestToGetUser
            .asObservable()
            .map { users in users.filter {$0.userId == 
             emailDetails.userIds }.first }
            .map {correctUsers in return correctUsers?.email}
            .unwrap()

我得到的错误:二进制运算符“==”不能应用于“String”和“[String]”类型的操作数。

据我所知,您的问题实际上与RxSwift无关。显然,emailDetails.userIds是一个字符串数组[String]。您可以在映射时使用以下选项检查数组是否包含用户ID:

    .map { users in users.filter { emailDetails.userIds.contains($0.userId) }.first }
第一场比赛。如果要将它们全部放在一个数组中,只需删除.first并映射到电子邮件字段:

self.emailRecipients = networkRequestToGetUser
        .asObservable()
        .map { users in 
            users.filter {
                emailDetails.userIds.contains($0.userId)
            }.map { $0.email } 
        }

获取电子邮件地址数组的可观察值。要获得实际地址,别忘了订阅emailRecipients Observable。

以下是对我有用的答案。self.emailRecipients=networkRequestUsers.asObservable.map{$0.filter{$0.userId==emailDetails.userIds}}}.map{$0.map{$0.email}}.unwrap