如何让按钮执行在其“父”视图中触发功能的操作?我正在尝试重构我的代码,以便组件尽可能小。
在这种情况下,按钮执行一些任务,但其中之一是运行一个函数:
Button(
action: {
self.setViewBackToNil()
}){
Text("Button")
}
// which triggers a function
func setViewBackToNil(){
self.userData.image = nil
self.isProcessing = false
.... etc
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我将按钮变成它自己的视图,我不能传递 self.setViewBackToNil 因为它包含在父级的结构中。
组件有没有办法触发其父级中的函数?
krj*_*rjw 53
这是一个关于如何将闭包传递给子视图然后调用父视图的小示例:
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")
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助!
这是传递函数的示例:
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")
}
}
Run Code Online (Sandbox Code Playgroud)