Я пытаюсь создать приложение, используя SwiftUI и архитектуру MVVM. Я хотел бы, чтобы мой View представлял оповещение всякий раз, когда его ViewModel считает это необходимым, например, когда у него есть какой-либо новый результат, доступный из модели. Поэтому предположим, что всякий раз, когда виртуальная машина обнаруживает новый результат, она соответственно устанавливает status
:
Модель представления:
enum Status {
case idle
case computing
case newResultAvailable
}
class MyViewModel: ObservableObject {
@Published var status = Status.idle
...
}
Представление:
struct ContentView: View {
@ObservedObject var vm = MyViewModel()
@State private var announcingResult = false {
didSet {
// reset VM status when alert is dismissed
if announcingResult == false {
vm.status = .idle
}
}
}
var body: some View {
Text("Hello")
.alert(isPresented: $announcingResult) {
Alert(title: Text("There's a new result!"),
message: nil,
dismissButton: .default(Text("OK")))
}
}
}
Apple разработала модификатор .alert()
, чтобы принимать привязку в качестве первого аргумента, чтобы предупреждение отображалось всякий раз, когда связанное свойство становится true
. Затем, когда предупреждение отклоняется, свойство привязки автоматически устанавливается на false
.
Мой вопрос: Как я могу отображать предупреждение, когда виртуальная машина status
становится .newResultAvailable
? Мне кажется, что именно так должен работать надлежащий MVVM, и он ощущается в духе всех демонстраций SwiftUI WWD C, но я не могу найти способ ...