SwiftUI, Как закрыть текущее представление представления при успешном возврате вызова API
Я использую SwiftUI и пытаюсь выполнить простое логическое действие, но не могу понять иерархию действий SwiftUI.
У меня есть один вызов API примерно так,
final class TaskData: ObservableObject {
@Published var updatedFields = false
@Published var updateMsg = ""
func updateFields()
{
//Some API Call
.whenSuccess { (response) in
DispatchQueue.main.async {
self.updatedFields = true
self.updateMsg = "Successfully updated fields"
//Send Request to dismiss current View ???
}
}
}
}
Теперь у меня есть что-то вроде этого представления, и по запросу я хочу отклонить это представление, но я не могу найти для этого какой-либо метод,
struct TaskView: View {
@Environment(\.presentationMode) var currentView: Binding<PresentationMode>
@EnvironmentObject var taskData: TaskData
var body : some View {
//Some Views here ////
//Need Some code here to dismiss currentView?????
.navigationBarItems(trailing: Button(action: {
}, label: {
Text("Done")
}).onTapGesture {
self.taskData.updateFields() // Method Call to Update fields
})
}
Если кто-то может объяснить эту вещь немного подробнее, так как я новичок в SwiftUI, я видел много учебников, но не могу понять эту структуру swift.
1 ответ
Не показано, как TaskView
представлен, но имея presentationMode
в приведенном снимке кода предположим, что он действителен, поэтому подход может быть следующим
@Environment(\.presentationMode) var presentationMode //better to name it same,
//type is extracted from Environment
@EnvironmentObject var taskData: TaskData
var body : some View {
//Some Views here ////
SomeView()
.onReceive(taskData.$updatedFields) { success in
if success {
self.presentationMode.wrappedValue.dismiss() // dismiss self
}
}
...