Как сохранить список в другом представлении в SwiftUI - PullRequest
0 голосов
/ 07 мая 2020

В моем приложении SwiftUI у меня есть вкладки в нижней части экрана. в другом случае, чтобы код оставался чистым, я хочу, чтобы каждая вкладка была в отдельном представлении / классе. На одной вкладке у меня есть список. По некоторым причинам я не могу переместить список в отдельное представление. Это мой исходный код: import 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: [Комнаты] не преобразовываются в Комнаты

Ошибка 2: Generi c невозможно определить параметр SelectionValue

Если бы это было предложено, я бы даже переместил его в другой быстрый файл.

1 Ответ

0 голосов
/ 07 мая 2020

Похоже, есть некоторая путаница между массивом Rooms: [Room] и одним типом данных объекта 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")
    }
}
...