首页 > 解决方案 > 如何制作一个空视图数组,然后初始化它以在 SwiftUI 中渲染?

问题描述

我得到了 3 个编码视图,其名称为:circleView1、circleView2、circleView3,它们基本上呈现 1,2 和 3 的圆形图像。

我的目标:我想将这 3 个视图附加到一个空数组以供使用。

代码有问题,不工作!

import SwiftUI


struct circleView1: View { var body: some View { Image(systemName: "1.circle").font(Font.largeTitle).padding() } }
struct circleView2: View { var body: some View { Image(systemName: "2.circle").font(Font.largeTitle).padding() } }
struct circleView3: View { var body: some View { Image(systemName: "3.circle").font(Font.largeTitle).padding() } }



struct ContentView: View {
    
   var shapeArray: [View] = [EmptyView()]
    

    var body: some View {
        
        

        VStack
        {
            shapeArray()
        }
        .onAppear()
        {
            shapeArray().append(circleView1)
            shapeArray().append(circleView2)
            shapeArray().append(circleView3)
        }
        
        
    }
}

标签: swiftui

解决方案


您可以使用 SwiftUI 的包装器AnyView来擦除类型。即使在技术上是可行的,我也不会真正推荐这种使用和消费视图。

我的工作示例:

import SwiftUI

struct circleView1: View { var body: some View { Image(systemName: "1.circle").font(Font.largeTitle).padding() } }
struct circleView2: View { var body: some View { Image(systemName: "2.circle").font(Font.largeTitle).padding() } }
struct circleView3: View { var body: some View { Image(systemName: "3.circle").font(Font.largeTitle).padding() } }

struct ContentView: View {
   var shapeArray: [AnyView] = []
    
    var body: some View {
        VStack {
            ForEach(0..<self.shapeArray.count) { i in
                self.shapeArray[i]
            }
        }
    }
    
    init() {
        self.shapeArray.append(AnyView(circleView1()))
        self.shapeArray.append(AnyView(circleView2()))
        self.shapeArray.append(AnyView(circleView3()))
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

推荐阅读