【问题标题】:How to keep a list in the different View in SwiftUI如何在 SwiftUI 的不同视图中保留列表
【发布时间】:2020-05-06 22:28:19
【问题描述】:

在我的 SwiftUI 应用程序中,我在屏幕底部有标签视图。 为了保持代码干净,我希望每个选项卡都位于单独的视图/类中。在一个标签中,我有列表。由于某些原因,我无法将列表移动到单独的视图中。这是我的初始代码: 导入 SwiftUI

struct ContentView: View {
    var rooms : [Rooms] = []
    @State var selectedView = 1
    var body: some View {
        VStack {
            TabView() {
                List(rooms) { rooms in
                    Image(systemName: "heart.fill")
                    HStack {
                        VStack(alignment: .leading) {
                        Text(rooms.name)
                            .font(.headline)
                        Text("members")
                            .font(.body)
                        }
                    }
                }.tabItem { Image(systemName: "waveform.path.ecg") }.tag(1)


                ExtractedView().tabItem { Text("Tab Label 2") }.tag(2)
            }
        }

    }
}

这就是我尝试制作单独视图的方式:

struct ContentView: View {
    var rooms : [Rooms] = []
    @State var selectedView = 1
    var body: some View {
        VStack {
            TabView() {
                ExtractedView1(rooms: rooms).tabItem { Image(systemName: "waveform.path.ecg") }.tag(1)


                ExtractedView2().tabItem { Text("Tab Label 2") }.tag(2)
            }
        }

    }
}

struct ExtractedView1: View {
    let rooms : Rooms
    var body: some View {
        List(rooms) { rooms in
            Image(systemName: "heart.fill")
            HStack {
                VStack(alignment: .leading) {
                    Text(rooms.name)
                        .font(.headline)
                    Text("members")
                        .font(.body)
                }
            }
        }
    }
}

知道为什么这是错误的吗?我收到以下错误:

错误 1:[Rooms] 无法转换为 Rooms

错误 2:无法推断通用参数“SelectionValue”

如果有人建议,我什至会把它移到另一个 swift 文件中。

【问题讨论】:

    标签: swift swift3 swiftui swiftui-list


    【解决方案1】:

    看起来房间数组之间存在一些混淆:[Room] 和单个 Room 对象数据类型。只需确保使用 List 进行视图以接受一组房间:[Room] 以便它可以遍历它们

    struct Room: Identifiable {
        let id = UUID()
        let name: String
    }
    
    struct ContentView: View {
        var rooms : [Room] = []
        @State var selectedView = 1
        var body: some View {
            VStack {
                TabView() {
                    ExtractedView1(rooms: rooms).tabItem { Image(systemName: "waveform.path.ecg") }.tag(1)
    
    
                    ExtractedView2().tabItem { Text("Tab Label 2") }.tag(2)
                }
            }
    
        }
    }
    
    struct ExtractedView1: View {
        let rooms : [Room]
        var body: some View {
            List(rooms) { room in
                Image(systemName: "heart.fill")
                HStack {
                    VStack(alignment: .leading) {
                        Text(room.name)
                            .font(.headline)
                        Text("members")
                            .font(.body)
                    }
                }
            }
        }
    }
    
    struct ExtractedView2: View {
        var body: some View {
            Text("ExtractedView2")
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 2020-04-04
      • 2013-03-01
      相关资源
      最近更新 更多