我有一个CustomVStackView(),可以在ContentView()中使用它,我的目标, 是为了能够将CustomVStackView()与ContentView()中的其他视图一起使用)。
代码在这里,有问题!
struct ContentView: View {
var body: some View {
CustomVStackView(inPutView: Text("Hello").font(Font.largeTitle) )
}
}
struct CustomVStackView: View {
var inPutView: View = EmptyView()
var body: some View {
VStack
{
inPutView
}.padding().background(Color.purple)
}
}
PS:我知道AnyView(),但是我想用像Text()或Circle()这样的普通View()来喂我的inPutView。 。
答案 0 :(得分:1)
您必须使用泛型才能传递任何任意视图。在这种情况下,CustomVStackView
将具有符合Content
的通用类型View
。
如果您还对参数使用@ViewBuilder
,则CustomVStackView
的用户将能够对内部视图使用与常规VStack
相同的语法(并且整个SwiftUI):
struct CustomVStackView<Content: View>: View {
private var inputView: () -> Content
init(@ViewBuilder inputView: @escaping () -> Content) {
self.inputView = inputView
}
var body: some View {
VStack
{
inputView()
}
.padding().background(Color.purple)
}
}
用法是:
CustomVStackView() {
Text("Hello").font(Font.largeTitle)
Text("World")
}