如何在没有ObservableObject的SwiftUI视图中使用合并?

izkcnapc  于 2023-04-04  发布在  Swift
关注(0)|答案(1)|浏览(170)

我试图让我的发布者,通常会在视图本身的ObservableObject viewModel中。如何在视图结构的Init中使用合并?这里的关键是不要使用ObservableObject或@StateObject或viewModel。例如,这在下面不起作用。

struct ContentView: View {
  
  @State private var boolOne = false
  @State private var boolTwo = false
  @State private var boolsBoth = false
  
  private var cancellables = Set<AnyCancellable>()
  
  init() {
  // dummy publisher that doesn't nothing, not the point of the question
    Publishers.CombineLatest($boolOne, $boolTwo)
      .receive(on: RunLoop.main)
      .map { boolOne, boolTwo -> Bool in
        return true
      }
      .removeDuplicates()
      .sink(receiveValue: { value in
        boolsBoth = value
      })
  }
  
  var body: some View {
    VStack {
      Text("Hello, world!")
    }
    .padding()
  }
}

我在这里的第20行得到一个错误 “Generic struct 'CombineLatest' requires that 'Binding' conform to 'Publisher'”。我知道这是可以做到的,但我没有做到,而且大多数在线教程都使用viewModel模式作为ObservableObject。我必须先在某处创建一个AnyPublisher var还是在某处使用eraseToAnyPublisher?

krcsximq

krcsximq1#

正如Jessy评论的那样,SwiftUI中的“视图模型”的想法是无稽之谈。只要学习View结构体,它就已经做到了这一点。

MyView(bool1, bool2)

如果bool1或bool2与上次不同,将调用MyView的body

相关问题