如何在SwiftUI中的不同视图中保留列表

问题描述 投票:0回答:1

在我的SwiftUI应用中,我在屏幕底部有一个Tab视图,为了保持代码的简洁,我想让每个Tab都在一个单独的视图类中。在一个Tab中,我有列表。由于某些原因,我不能将列表移动到一个单独的视图中。这是我最初的代码:导入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个回答
0
投票

看起来有一些混淆之间的数组的客房。[Room] 和一个单一的 Room 对象数据类型。只要确保你的List视图能够接受一个Room的数组。[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")
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.