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
           }
        }
    ...
Другие вопросы по тегам