【发布时间】:2022-11-27 06:53:45
【问题描述】:
如果您在编写应用程序时遇到以下任何限制:
- 您的 ViewModel 或模型的类型是 Struct 而不是类。这样你将无法使用 ObservableObject + ObservedObject。
- 还有第二个限制是避免在您的 ViewModel 或模型中使用属性包装器作为:@Binding 或 @Published。
考虑下一个解决方案。
【问题讨论】:
如果您在编写应用程序时遇到以下任何限制:
考虑下一个解决方案。
【问题讨论】:
如果您有一个作为模型或视图模型的结构,并且您需要在此处更新您的 SwiftUI 视图,这就是如何使用 SwiftUI + Combine 来做到这一点。
import Combine
struct ViewModel {
var textChangedPublisher: AnyPublisher<String, Never> {
textChangedSubject.eraseToAnyPublisher()
}
private let textChangedSubject = PassthroughSubject<String, Never>()
func triggerUpdate() {
let newStr = DateFormatter().string(from: Date())
textChangedSubject.send(newStr)
}
}
还有一个屏幕:
import SwiftUI
struct ContentView: View {
private let vieModel = ViewModel()
@State private var title = "Let's start"
var body: some View {
VStack {
Text(title)
Button.init("Show cuurent date") {
vieModel.triggerUpdate()
}
.onReceive(vieModel.textChangedPublisher) { newValue in
title = newValue
}
}
.padding()
}
}
【讨论】: