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()来修复它