在Swift 5中的Combine中使用CurrentValueSubject创建管道时,如何强制使用初始值?

问题描述

我正在尝试获取EventDetailsModel的初始值并订阅所有将来的更新。

当我打电话给eventDetails(..)时,所有发布者中已经有一些当前值(即chatModelsuserModels有10多个项目);问题在于,因为没有新的更新,所以由于从未调用EventDetailModels,因此生成的管道永远不会返回.map(...)

构造管道时如何使组合管道至少通过现有值一次,以便接收器具有一些初始值?

var chatModels: Publishers.Share<CurrentValueSubject<[ChatModel],Never>> = CurrentValueSubject([]).share()
var userModels: CurrentValueSubject<[String: UserModel],Never> = CurrentValueSubject([:])

func eventDetails(forChatId chatId: String) -> AnyPublisher<EventDetailsModel?,Never> {
    return chatModels
        .combineLatest(userModels)
        .map({ (chatList,userModels) -> EventDetailsModel? in
            // Never gets called,even if chatModels and userModels has some existing data ?
            if let chatModel = (chatList.first { $0.id == chatId}) {
                return EventDetailsModel(chatModel,userModels)
            }
            return nil
        })
        .eraseToAnyPublisher()
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)