如何在 SwiftUI 中推送导航 Link 时获取 运行 的函数

How to get a function to run when you push a Navigation Link in SwiftUI

在我的应用程序结束时,我有一个导航 link,它在进行 API 调用时将用户发送到屏幕。

问题是,当我按下导航 link 时,似乎发送 API 数据的功能实际上并不是 运行...我做错了什么在吗?

HStack {
             Spacer()
                            NavigationLink(destination: Success()
                                .navigationBarBackButtonHidden(true)){
                                Text("Finish")
                                    .foregroundColor(Color.newPrimary)
                                    .frame(minHeight: 40)
                                    .frame(width: 311)
                                    .background(Color.white)
                                    .cornerRadius(10)
                                    .padding(.top, 30)
                                }
                                .onTapGesture {
                                    print("Sending to Storage")
                                    SendData().sendData(apiData: data)
                                }
                            Spacer()
                        }               

我能想到几个解决方案。首先是在目标视图上使用 onAppear。这比第二个解决方案的代码少,但我已经看到 onAppear 在意外时间或不止一次被触发的问题。

NavigationLink {
    Success()
        .navigationBarBackButtonHidden(true)
        .onAppear {
            print("Sending to Storage")
        }
} label: {
    Text("Finish")
}

另一种解决方案是绑定一个变量到NavigationLinkisActive 属性,然后使用onChange(of:perform:)来监视变化并在值更改为 true.

struct ContentView: View {
    @State private var navIsActive = false
    
    var body: some View {
        HStack {
            Spacer()
            
            NavigationLink(isActive: $navIsActive) {
                Success()
                    .navigationBarBackButtonHidden(true)
            } label: {
                Text("Finish")
            }
            
            Spacer()
        }
        .onChange(of: navIsActive) { newValue in
            if newValue {
                print("Sending to Storage")
            }
        }
    }
}