PublisherView

Latest release Swift 5.1 Platforms: iOS, macOS, tvOS, watchOS

一个 SwiftUI 视图,用于订阅 Combine 发布者,并根据接收到的值和错误显示不同的视图。

用法

可以将其与数据任务发布者结合使用,该发布者会将数据解码为模型对象。在此示例中,当接收到帖子列表时,我们将其显示出来;如果任务失败,则在屏幕上显示错误消息。

struct PostsView: View {
  // Get this publisher from somewhere, maybe a data task publisher
  let publisher: AnyPublisher<[Post], Error>
  var body: some View {
    PublisherView(publisher: publisher,
                  initial: LoadingView.init,
                  output: Content.init,
                  failure: FailureView.init)
  }
}

extension PostsView {

  fileprivate struct Content: View {
    let posts: [Post]
    var body: some View {
      List(posts) { post in
        Text(post.title)
      }
    }
  }
}

struct LoadingView: View {
  var body: some View {
    // Some awesome loading view
  }
}

struct FailureView: View {
  let error: Error
  var body: some View {
    Text(error.localizedDescription)
  }
}