Я пытаюсь передать объект данных, содержащий вложенный массив объектов, из основного представления в представление сведений. В настоящее время я могу отобразить родительский уровень объекта данных, но я пытаюсь выяснить, как передать вложенный массив данных на страницу сведений. Ниже приведен пример моей модели данных и того, как я собираюсь отображать информацию в настоящее время. Я не уверен, что мне нужно ввести для кода, где я передаю информацию в элементе NavigationLink. Я уверен, что, вероятно, есть лучший способ сделать это, однако, я просто дизайнер, пытающийся выяснить это по причинам прототипирования.
// Passports.swift //
import Foundation
import SwiftUI
struct Passports: Identifiable {
let id : Int
let passportPremium: Bool
let passportActive: Bool
let passportTitle: String
let passportDates: String
let venues: [Venue]
}
struct Venue: Identifiable {
let id = UUID()
let title : String
let venueArea: String
let venueItems: [venueItem]
}
struct venueItem {
let title: String
let productDescription: String
let productPrice: Double
let productType: String
let newStatus: Bool
let diningPlan: Bool
let kidFriendly: Bool
let vegetarian: Bool
let glutenFree: Bool
let featuredProduct: Bool
let containsAlcohol: Bool
}
extension Passports {
static func all() -> [Passports] {
return [
Passports (
id: 1001,
passportPremium: false,
passportActive: true,
passportTitle : "Passport Title Example",
passportDates: "October 20 - November 3, 2019",
venues: [
Venue (
title: "Venue Name",
venueArea: "Germany",
venueItems: [
venueItem (
title: "Potato Dumpling",
productDescription: "Potato Dumpling with Mushroom Sauce",
productPrice: 0.00,
productType: "Food",
newStatus: false,
mealPlan: false,
kidApproved: true,
vegetarian: false,
glutenFree: false,
featuredProduct: false,
containsAlcohol: false
),
venueItem (
title: "Pork Schnitzel",
productDescription: "Pork Schnitzel with Mushroom Sauce and Spaetzle",
productPrice: 0.00,
productType: "Food",
newStatus: false,
mealPlan: false,
kidApproved: false,
vegetarian: false,
glutenFree: false,
featuredProduct: false,
containsAlcohol: false
)
])
]
)
]
}
}
// PassportsView //
import SwiftUI
struct PassportsView: View {
var model = Passports.all()
var body: some View {
NavigationView {
ForEach(self.model) { item in
NavigationLink (destination: PassportDetails(passportTitle: item.passportTitle, venues: [Venue()] ) ) {
GeometryReader { geometry in
HStack {
VStack(alignment: .leading) {
Text(item.passportTitle)
.fontWeight(.semibold)
.foregroundColor(Color.white)
.multilineTextAlignment(.leading)
Text(item.passportDates)
.foregroundColor(Color.white)
}.frame(width: geometry.size.width, height: 120)
.background(Color("Purple"))
.cornerRadius(6)
}
}
}.padding(.horizontal)
}
}
}
}
// PassportDetails //
struct PassportDetails: View {
var passportTitle = "Passport Name"
var venues: [Venue] = [
Venue(title: "Test Venue", venueArea: "Test Area", venueItems: [venueItem]())
]
var venueProd: [venueItem] = [
venueItem(title: "Test item", productDescription: "Test Description", productPrice: 9.99, productType: "Food", newStatus: false, mealPlan: true, kidApproved: false, vegetarian: false, glutenFree: false, featuredProduct: false, containsAlcohol: false)
]
var body: some View {
NavigationView {
List {
HStack {
Text("Test")
Spacer()
Text("9.99")
}
}
}.navigationBarTitle(Text(passportTitle))
}
}