SwiftUI 回调作为视图的参数
Posted
技术标签:
【中文标题】SwiftUI 回调作为视图的参数【英文标题】:SwiftUI callback as parameter to a view 【发布时间】:2020-03-28 16:34:28 【问题描述】:我正在尝试将我的 SwiftUI 视图拆分为尽可能小的可重用组件。所以我有位于顶部的 MainView,然后是两个视图(MyContentView 和 MenuView),它们都位于 MainView 中。两个内部视图都有一些我想在 MainView 中更新的功能。所以我想我可以将一些函数作为参数从 MainView 传递给内部视图,所以当在内部视图中按下按钮时,它会触发 MainView 中的代码。我设法接近它的最接近的方法是在每次更新内部视图时触发函数参数。实现这一目标的最佳方法是什么?这是我的代码示例:
主视图:
struct MainView: View
var body: some View
VStack
MyContentView(self.$doSomething)
MenuView(self.$doSomething)
func doSomething()
print("do something")
struct MyContentView : View
var doSomething : ()
var body: some View
Button(action: self.doSomething ) Text("do something")
struct MenuView : View
var doSomething : ()
var body: some View
Button(action: self.doSomething ) Text("Menu do something")
能够从内部视图接收回调的最佳做法是什么?
【问题讨论】:
【参考方案1】:以下变体有效。使用 Xcode 11.4 测试。
struct MainView: View
var body: some View
VStack
MyContentView(doSomething: self.doSomething)
MenuView(doSomething: self.doSomething)
func doSomething()
print("do something")
struct MyContentView : View
var doSomething : () -> ()
var body: some View
Button(action: self.doSomething() ) Text("do something")
struct MenuView : View
var doSomething : () -> ()
var body: some View
Button(action: self.doSomething() ) Text("Menu do something")
【讨论】:
你是个传奇...我尝试了各种组合,但看起来我错过了这个。我没有像您在 MainView 上那样尝试传递参数。非常感谢:) 是的,他是;)他也经常帮助我;) 方法中如何传递参数? @YogendraPatel 有关将参数传递给闭包的示例,请参阅medium.com/swiftcommmunity/…以上是关于SwiftUI 回调作为视图的参数的主要内容,如果未能解决你的问题,请参考以下文章