一个 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)
}
}