拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 将具有发布者/接收器组合的函式转换为异步函式

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

白鹭 - 2022-03-01 2152 0 0

我有以下功能loadData,我想在refreshableSwiftUI 串列中使用它为此,我需要使它成为一个async函式:

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接收器。例如:

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它?

uj5u.com热心网友回复:

每个联合发布者都有一个values异步序列属性:

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

因此,任何以 Publisher 开头的管道都可以由async/await代码替换values使用asyncfor 回圈捕获因此,如果您愿意,可以继续使用您的followersPublisher和您的followingPublisher,只需使用async/await而不是组合来订阅它们

另一方面,根据这些发布者的行为,您可能希望更进一步地遵循此链并摆脱这些发布者并用async您可以从async/await背景关系呼叫方法替换它们

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *