inPutView
이 코드 예제에서 어떻게 계산할 수 있는지 알고 싶습니다. 이처럼 작동하는 코드는 몇 가지 뷰를 취하고 배경색을 지정하고 뷰 수를 계산합니다.
struct ContentView: View {
var body: some View {
ModelView(inputView: {
Text("Hello, world!").padding()
Text("Hello, world!").padding()
})
}
}
struct ModelView<Content: View>: View {
var inPutView: () -> Content
init(@ViewBuilder inputView: @escaping () -> Content) { self.inPutView = inputView }
var body: some View {
VStack {
inPutView()
}
.background(Color.green)
Text("count of inPutViews: 2").padding() // Here: How can I found out the count of inPutView?
}
}
최신 정보:
struct ContentView: View {
var inputViews: [AnyView] = [AnyView(Text("Hello, world!").padding()), AnyView(Text("Hello, world!").padding())]
var body: some View {
ModelView2(inputViews: inputViews)
}
}
struct ModelView2: View {
var inputViews: [AnyView]
var body: some View {
VStack {
ForEach(inputViews.indices, id:\.self) { index in
inputViews[index]
}
}
.background(Color.green)
Text("count of inPutViews: \(inputViews.count)")
.padding()
}
}
@ViewBuilder
클로저 내부의 개별 뷰인 경우 카운트를 감지 할 수 없습니다 . 가 @ViewBuilder
생성 한 결과보기를하고는 inPutView
A와 처리 단일 보기.
가능한 해결책은 [AnyView]
배열을의 입력으로 전달하는 것 입니다 ModelView
. 그러나 AnyView
일치하지 않습니다 Hashable
도 Identifiable
당신이 그것을 사용할 수 있도록 ForEach
.
귀하의 경우 다음을 준수하는 별도의 구조체를 만들 수 있습니다 Identifiable
.
struct AnyViewItem: Identifiable {
let id = UUID()
let view: AnyView
}
다음 ModelView
배열로 채 웁니다 AnyViewItem
.
struct ModelView: View {
var inputViews: [AnyViewItem]
var body: some View {
VStack {
ForEach(inputViews) {
$0.view
}
}
.background(Color.green)
Text("count of inPutViews: \(inputViews.count)")
.padding()
}
}
그런 다음 다음과 같이 기본보기에서 사용할 수 있습니다.
struct ContentView: View {
var body: some View {
ModelView(
inputViews: [
Text("Hello, world!").padding(),
Text("Hello, world!").padding(),
]
.map {
AnyViewItem(view: AnyView($0))
}
)
}
}
코멘트에 제안 또는,이 경우 당신은 할 수 의 반복을 배열하고 :inputViews
[AnyView]
indices
ForEach(inputViews.indices, id: \.self) {
inputViews[$0]
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다