3

所以我有一个类型的值,AnyPublisher<Foo, Error>我需要将它转换为,Published<Foo>.Publisher以便我可以将它用作@Published

所以我的想法是我有一个 MVVM 架构

struct SwiftUIView: View {
  @ObservedObject var viewModel: MyViewModel
  var body: some View {
    Text(/*Foo has a title, how do I access it? */)
  }
  
}
class MyViewModel: ObservableObject {
  var cellModels: AnyPublisher<Foo, Error>
  // so the idea is to have and then access it in swiftUI view via viewModel.cellModels2.title
  @Published cellModels2 = convert_somehow_to_publisher(cellModels)
}

显然我不能使用 viewModel.cellModels

那可能吗?

4

1 回答 1

3

看起来您需要Foo在视图模型上拥有一个属性,并使用AnyPublisher<Foo, Error>您拥有的发布者对其进行更新。

class MyViewModel: ObservableObject {

  var cellModels: AnyPublisher<Foo, Error> = ...
  private var cancellable: AnyCancellable?

  @Published var foo: Foo?

  init() {
    cancellable = cellModels.assign(to: \.foo, on: self)
  }
} 

然后就可以.foo在视图中正常访问了:

struct SwiftUIView: View {
  @ObservedObject var viewModel: MyViewModel
  var body: some View {
    Text(viewModel.foo?.title ?? "")
  }
}
于 2020-07-20T16:47:22.590 回答