将字符串值从另一个视图传递给视图构建器
Passing a String value to a viewbuilder from another view
这是基本视图
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 时,我需要从另一个视图向此 BaseView 传递两个字符串值。一个用于按钮标签,另一个用于 URL.
我无法通过在初始化程序上声明变量来完成此操作,出现各种错误。怎样才能
我做到了?
编辑
baseView 中的初始化程序
init(@ViewBuilder content: () -> Content , btnlabel: String) {
self.content = content()
self.btnlabel=btnlabel
}
我是如何从另一个视图调用它的
BaseView.init(content: () -> _, btnlabel: "")
您可以像普通初始化一样传递任何参数或字符串参数。
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")
这是基本视图
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 时,我需要从另一个视图向此 BaseView 传递两个字符串值。一个用于按钮标签,另一个用于 URL.
我无法通过在初始化程序上声明变量来完成此操作,出现各种错误。怎样才能 我做到了?
编辑
baseView 中的初始化程序
init(@ViewBuilder content: () -> Content , btnlabel: String) {
self.content = content()
self.btnlabel=btnlabel
}
我是如何从另一个视图调用它的
BaseView.init(content: () -> _, btnlabel: "")
您可以像普通初始化一样传递任何参数或字符串参数。
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")