SwiftUI 将 Swift 代码作为参数传递给可重用视图

Posted

技术标签:

【中文标题】SwiftUI 将 Swift 代码作为参数传递给可重用视图【英文标题】:SwiftUI pass Swift code as a parameter for reusable views 【发布时间】:2020-12-28 16:19:24 【问题描述】:

我正在整理我的代码,并且我已经制作了这个自定义按钮视图:

@State var buttonName = ""
@State var imageName = ""

Button(action: 
              // Code that should be passed as a parameter to be run  
            )
                HStack(spacing: 15)
                    Image(systemName: imageName).resizable().frame(width:40, height: 40)
                    
                    Text(buttonName)
                    Spacer(minLength: 15)
                    Image(systemName: "chevron.right")
                .padding()
                .foregroundColor(Color.black.opacity(0.5))
            

通过这个设置,我可以重用这个视图:

buttonView(buttonName: "Logout", imageName: "person.fill")

但是,我还想指定应在单击可重用按钮后运行的代码,例如:

buttonView(buttonName: "Logout", imageName: "person.fill", action: Logout())

然后,这将进入自定义视图,当用户使用可重用按钮视图主体中的导航视图单击时,按钮应该进入该自定义视图。

我将如何解决这个问题?我试了一下状态:

@State var action = -> Void

【问题讨论】:

【参考方案1】:

这是一个演示视图

struct DemoView: View 
    let action: () -> ()

    var body: some View 
        Button("Demo", action: action)
    

注意:不要对公共视图属性使用 @State 包装器!

【讨论】:

以上是关于SwiftUI 将 Swift 代码作为参数传递给可重用视图的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SwiftUI 将参数传递给 Button 的操作

SwiftUI 参数传递给不带参数的调用

如何将额外的参数传递给 Vision 框架?

将参数传递给 NSTimer 在 Swift 中调用的方法

如何将视图输入参数传递给 @State 变量?

多部分数据未将所有参数传递给服务器-Swift 3