ios - SwiftUI 将 Swift 代码作为可重用 View 的参数传递

标签 ios swift macos swiftui

我正在组织我的代码,并且我制作了这个自定义按钮 View :

@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))
            }

通过此设置,我可以重复使用此 View :

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

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

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

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

我该如何解决这个问题?我尝试过的状态:

@State var action = -> Void

最佳答案

这是用于此目的的演示 View

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

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

注意:不要将 @State 包装器用于公共(public) View 属性!

关于ios - SwiftUI 将 Swift 代码作为可重用 View 的参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65480645/

相关文章:

ios - Swift Eureka 表单 : how do you limit the number of rows in a multivalued section?

objective-c - iOS11 Swift 4 - 如何检查 Swift 类是否符合 Objective-C 中定义的协议(protocol)?

macos - 如何限制 OS X 程序的内存? ulimit -v 都不 -m 工作

swift - 如何在自定义 CALayer 子类的重写绘图函数中在 macOS 上绘制字符串?

c++ - 海湾合作委员会ld : symbol(s) not found for architecture i386

ios - 如何在 onDelete 中获取当前的 CoreData 项

ios - Xcode 7.3 - iOS 9.1 - 越狱 - 请检查您的设置并重试。 (0xE8000022)

ios - 更改 UIBezierArc 颜色,当它的 handle 仅从 handle 内部或外部绘制时

ios - 阿卡佩拉TTS引擎: "Undefined symbols" in XCode for all classes

swift - 是什么导致 'Constant captured by a closure before being initialized'错误