首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将具有发布者/接收器组合的函数转换为异步函数

将具有发布者/接收器组合的函数转换为异步函数
EN

Stack Overflow用户
提问于 2021-12-30 15:51:49
回答 1查看 302关注 0票数 -2

我有以下函数loadData,我想在refreshable的SwiftUI列表中使用它。为此,我需要使它成为一个async函数:

代码语言:javascript
复制
func loadData() {
  // Publishers
  let followersPublisher = modelLoader.loadAllFollowers(withId: id)
  let followingPublisher = modelLoader.loadAllFollowing(withId: id)
  let friendshipsPublisher = Publishers.Zip(followersPublisher, followingPublisher)
    .share()
    .eraseToAnyPublisher()

  // Sinks
  getFollowers(from: followersPublisher)
  getFollowerChange(
    from: followersPublisher,
    cachedFollowers: followers
  )
  getFollowing(from: followingPublisher)
  getNotFollowingUserBack(from: friendshipsPublisher)
  getUserNotFollowing(from: friendshipsPublisher)

  followersPublisher
    .connect()
    .store(in: &cancellables)
  followingPublisher
    .connect()
    .store(in: &cancellables)
}

在这个函数中,所有独立的函数都使用Publisher接收器。例如:

代码语言:javascript
复制
private func getFollowing(from publisher: Publishers.MakeConnectable<AnyPublisher<Set<User>, Never>>) {
  publisher
    .sink(
      receiveCompletion: { _ in },
      receiveValue: { [weak self] following in
        self?.following = following
      }
    )
    .store(in: &cancellables)
}

如何将其转换为async函数,以便与其一起使用await

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-30 15:59:52

每个组合发布服务器都有一个values属性,它是一个异步序列:

https://developer.apple.com/documentation/combine/publisher/values-1dm9r

因此,任何以发行者开头的管道都可以被async/await代码替换,使用async for循环捕获async。因此,如果您愿意,您可以继续使用您的followersPublisherfollowingPublisher,只需使用async/await而不是组合订阅。

另一方面,取决于这些发布者所做的事情,您可能希望进一步追溯这条链,并摆脱这些发布者,用您可以从async上下文中调用的async/await方法来替换它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70533831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档