1

这是基本视图

struct BaseView<Content: View>: View {
    @State private var ShowSFView : Bool = false
   
    let content: Content
   
    init(@ViewBuilder content:  () -> Content ) {
        self.content = content()
     
        
    }

//Code for button and URL

}

当我调用这个 baseView 时,我需要从另一个 View 将两个 String 值传递给这个 BaseView 。一种用于按钮标签,另一种用于 URL。

我无法通过在初始化程序上声明变量来做到这一点,得到各种错误。我怎样才能做到这一点?

编辑

baseView 中的初始化程序

init(@ViewBuilder content:  () -> Content , btnlabel: String) {
        self.content = content()
        self.btnlabel=btnlabel
        
    }

我如何从另一个视图中调用它

 BaseView.init(content: () -> _, btnlabel: "")
4

1 回答 1

1

您可以像普通初始化一样传递任何参数或字符串参数。

struct BaseView<Content: View>: View {
    
    @State private var ShowSFView : Bool = false
    
    private let content: Content
    
    let stringOne: String
    let stringTwo: String
    
    init(stringOne: String, stringTwo: String, @ViewBuilder content:  () -> Content ) {
        self.content = content()
        self.stringOne = stringOne
        self.stringTwo = stringTwo
    }
    
    var body: some View {
        Text(stringOne)
        Text(stringTwo)
    } 
}

现在你可以像这样使用它了

BaseView(stringOne: "str1", stringTwo: "str2") {
    // Content
}

编辑

从您的示例中,您可以像这样使用它

BaseView(content: {
    // Content
}, btnlabel: "Lable")
于 2021-11-26T10:35:19.540 回答