Button SwiftUI-按钮-如何将函数请求传递给父级

Button SwiftUI-按钮-如何将函数请求传递给父级,button,swiftui,Button,Swiftui,如何让按钮执行在其“父”视图中触发函数的操作?我试图重构我的代码,使组件尽可能小 在这种情况下,按钮执行一些任务,但其中之一是运行函数: Button( action: { self.setViewBackToNil() }){ Text("Button") } // which triggers a function func setViewBackToNil(){ self.userData.image = nil self.isProcessing = false ..

如何让按钮执行在其“父”视图中触发函数的操作?我试图重构我的代码,使组件尽可能小

在这种情况下,按钮执行一些任务,但其中之一是运行函数:

Button(
 action: {
  self.setViewBackToNil()
 }){
  Text("Button")
}

// which triggers a function
func setViewBackToNil(){
 self.userData.image = nil
 self.isProcessing = false
 .... etc
}
struct ChildView: View {
    var function: () -> Void
    
    var body: some View {
        Button(action: {
            self.function()
        }, label: {
            Text("Button")
        })
    }
}

struct ParentView: View {
    var body: some View {
        ChildView(function: self.passedFunction)
    }
    
    func passedFunction() {
        print("I am the parent")
    }
}
现在,如果我将按钮转换为它自己的视图,我无法传递self.setViewBackToNil,因为它包含在父级的结构中


组件是否有办法触发其父级中的函数?

这是一个小示例,介绍如何将闭包传递给子视图,然后子视图调用父级函数:

struct ChildView: View {
    var function: () -> Void
    
    var body: some View {
        Button(action: {
            self.function()
        }, label: {
            Text("Button")
        })
    }
}

struct ParentView: View {
    var body: some View {
        ChildView(function: { self.fuctionCalledInPassedClosure() })
    }
    
    func fuctionCalledInPassedClosure() {
        print("I am the parent")
    }
}

我希望这有帮助

编辑附加信息 下面是传递函数的示例:

Button(
 action: {
  self.setViewBackToNil()
 }){
  Text("Button")
}

// which triggers a function
func setViewBackToNil(){
 self.userData.image = nil
 self.isProcessing = false
 .... etc
}
struct ChildView: View {
    var function: () -> Void
    
    var body: some View {
        Button(action: {
            self.function()
        }, label: {
            Text("Button")
        })
    }
}

struct ParentView: View {
    var body: some View {
        ChildView(function: self.passedFunction)
    }
    
    func passedFunction() {
        print("I am the parent")
    }
}

除非你把函数传递给你的子组件,否则我认为没有。(例如,作为一个闭包)如何使
var函数:()->Void
可选?我相信是这样:
var函数:(()->Void)?
子视图的预览提供程序缺少函数参数。我如何修复它?也许可以添加这样的内容:
struct ChildView\u Preview:PreviewProvider{static var previews:some View{ChildView()}
好的,我刚刚用ChildView(函数:{})替换了ChildView()来修复它