为什么我生成的函数没有被执行?

Why isn't my generated function being executed?

我有一个注销按钮如下:

struct LogoutButtonView: View {
    @EnvironmentObject var state: AppState
    @StateObject var viewModel = ViewModel()
    
    var body: some View {
        Button("Log Out") { viewModel.isConfirming = true }
        .confirmationDialog("Are you that you want to logout",
                            isPresented: $viewModel.isConfirming) {
            Button("Confirm Logout", role: .destructive, action: viewModel.getLogoutAction(state: state))
            Button("Cancel", role: .cancel) {}
        }
        .disabled(state.shouldIndicateActivity)
    }
}

其视图模型如下:

extension LogoutButtonView {
    class ViewModel: ObservableObject {
        @Published var isConfirming = false
        
        func getLogoutAction(state: AppState) -> () -> Void {
            print("Inside getLogoutAction")
            return {
                func logout() {
                    print("Inside Logout")
                    state.shouldIndicateActivity = true
                    // .. Logout Logic
                }
            }
        }
    }
}

我需要将全局 AppState 的引用传递给视图模型,这就是我尝试生成注销函数而不是直接将其放入视图模型的原因。

为什么不打印“Inside Logout”? Swift 如何根据 Functional Programming 工作?从本地视图模型 update/access 全局 AppState 的正确方法是什么?

答案是你永远不会打电话给 logout()

的确,您 return 按钮点击时的功能,但您没有调用 returned (logout) 功能。所以它永远不会被执行。