SwiftUI - 按钮 - 如何将函数请求传递给父级
Posted
技术标签:
【中文标题】SwiftUI - 按钮 - 如何将函数请求传递给父级【英文标题】:SwiftUI - Button - How to pass a function request to parent 【发布时间】:2020-01-22 13:48:38 【问题描述】:如何让按钮执行触发其“父”视图中的功能的操作?我正在尝试重构我的代码,以使组件尽可能小。
在这种情况下,按钮执行一些任务,但其中之一是运行一个函数:
Button(
action:
self.setViewBackToNil()
)
Text("Button")
// which triggers a function
func setViewBackToNil()
self.userData.image = nil
self.isProcessing = false
.... etc
现在,如果我把按钮变成它自己的视图,我不能传递 self.setViewBackToNil 因为它包含在父级的结构中。
有没有办法让组件在其父级中触发函数?
【问题讨论】:
除非您将该功能传递给您的子组件,否则我认为没有。 (例如作为闭包) 【参考方案1】:这是一个关于如何将闭包传递给子视图然后调用父函数的小示例:
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")
我希望这会有所帮助!
编辑附加信息
下面是一个传递函数的例子:
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 function: () -> Void
成为可选项?
我相信是这样的:var function: (() -> Void)?
ChildView 的 PreviewProvider 缺少 function 参数。我该如何解决?
也许添加如下内容:struct ChildView_Preview: PreviewProvider static var previews: some View ChildView()
好的,我刚刚通过将 ChildView() 替换为 ChildView(function: ) 来修复它以上是关于SwiftUI - 按钮 - 如何将函数请求传递给父级的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 如何将数据传递给 ObservedObject 函数