如果主发布者不提供值并将后备值发送给主发布者,如何回退到备份发布者?

时间:2021-01-29 19:50:04

标签: swift combine

我有一个 CurrentValueSubject 可能持有已登录用户。

如果它发布了一个用户对象,我只想返回这个。

如果它不发布值,我想从另一个发布者请求该值,然后将其存储在 CurrentValueSubject 发布者中。并返回值。

我想出了以下方法,但实际上并不奏效。

let signedInUser = CurrentValueSubject<[UserEntity], Error>([])

public func getSignedInUser() -> AnyPublisher<[UserEntity], Error> {
    signedInUser
        .flatMap { userArray -> AnyPublisher<[UserEntity], Error> in
            if !userArray.isEmpty {
                return self.signedInUser
                    .eraseToAnyPublisher()
            }
            else {
                return self.userRemoteDataSource.getSignedInUser()
                    .map { userEntity -> [UserEntity] in
                        self.signedInUser.send([userEntity])
                        return [userEntity]
                    }
                    .eraseToAnyPublisher()
            }
        }
        .eraseToAnyPublisher()
}

0 个答案:

没有答案