我试图让我的发布者,通常会在视图本身的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?
1条答案
按热度按时间krcsximq1#
正如Jessy评论的那样,SwiftUI中的“视图模型”的想法是无稽之谈。只要学习View结构体,它就已经做到了这一点。
如果bool1或bool2与上次不同,将调用MyView的
body
。