【发布时间】:2022-11-10 23:02:17
【问题描述】:
在苹果教程“Scrumdinger”应用程序(https://developer.apple.com/tutorials/app-dev-training/creating-a-navigation-hierarchy)之后,我学到了很多关于在列表中显示数据的知识。但是,我遇到了一个小问题。我的项目的导航层次结构/数据模型与 Scrumdinger 应用程序相比稍微复杂一些。
这是“RateDetailView”所需的结束状态,它是“PayRateView”的子视图。几种飞机机队类型应该有其中之一:
我遇到的麻烦是构建我的 CardView 以正确地从 Fleet Model 中提取数据。一旦我解决了 CardView,其他所有内容都应该正确填充。
这是我对 CardView 的最新尝试(有错误):
struct RateCardView: View {
var fleet: Fleet
var body: some View {
ForEach(fleet.rates) { rate in
HStack {
Text("Year \(rate.year)")
Spacer()
Text("\(rate.foHourlyRate)")
Spacer()
Text("\(rate.captHourlyRate)")
}
}
}
}
这是我的模型数据......它在一个数组中有一个数组,这与苹果的 Scrumdinger 教程不同:
struct Fleet: Identifiable {
let id: UUID
var fleetName: String
var rates: [HourlyRates]
init(id: UUID = UUID(), fleetName: String, rates: [HourlyRates]) {
self.id = id
self.fleetName = fleetName
self.rates = rates
}
}
extension Fleet {
static let fleetList: [Fleet] = [
Fleet(fleetName: "B717", rates: [HourlyRates(year: [1,2,3,4,5,6,7,8,9,10,11,12], foHourlyRate: [91,126,148,152,155,159,163,167,169,171,173,174], captHourlyRate: [0,235,236,238,240,242,244,246,248,250,252,254,256])]),
Fleet(fleetName: "B737-7/8", rates: [HourlyRates(year: [1,2,3,4,5,6,7,8,9,10,11,12], foHourlyRate: [91,126,148,152,155,159,163,167,169,171,173,174], captHourlyRate: [0,235,236,238,240,242,244,246,248,250,252,254,256])]),
Fleet(fleetName: "B737-9", rates: [HourlyRates(year: [1,2,3,4,5,6,7,8,9,10,11,12], foHourlyRate: [91,126,148,152,155,159,163,167,169,171,173,174], captHourlyRate: [0,235,236,238,240,242,244,246,248,250,252,254,256])]),
Fleet(fleetName: "B757", rates: [HourlyRates(year: [1,2,3,4,5,6,7,8,9,10,11,12], foHourlyRate: [91,126,148,152,155,159,163,167,169,171,173,174], captHourlyRate: [0,235,236,238,240,242,244,246,248,250,252,254,256])]),
Fleet(fleetName: "B767-4", rates: [HourlyRates(year: [1,2,3,4,5,6,7,8,9,10,11,12], foHourlyRate: [91,126,148,152,155,159,163,167,169,171,173,174], captHourlyRate: [0,235,236,238,240,242,244,246,248,250,252,254,256])]),
Fleet(fleetName: "A220", rates: [HourlyRates(year: [1,2,3,4,5,6,7,8,9,10,11,12], foHourlyRate: [91,126,148,152,155,159,163,167,169,171,173,174], captHourlyRate: [0,235,236,238,240,242,244,246,248,250,252,254,256])]),
Fleet(fleetName: "A319/320", rates: [HourlyRates(year: [1,2,3,4,5,6,7,8,9,10,11,12], foHourlyRate: [91,126,148,152,155,159,163,167,169,171,173,174], captHourlyRate: [0,235,236,238,240,242,244,246,248,250,252,254,256])]),
Fleet(fleetName: "A321", rates: [HourlyRates(year: [1,2,3,4,5,6,7,8,9,10,11,12], foHourlyRate: [91,126,148,152,155,159,163,167,169,171,173,174], captHourlyRate: [0,235,236,238,240,242,244,246,248,250,252,254,256])]),
Fleet(fleetName: "A330", rates: [HourlyRates(year: [1,2,3,4,5,6,7,8,9,10,11,12], foHourlyRate: [91,126,148,152,155,159,163,167,169,171,173,174], captHourlyRate: [0,235,236,238,240,242,244,246,248,250,252,254,256])]),
Fleet(fleetName: "A350", rates: [HourlyRates(year: [1,2,3,4,5,6,7,8,9,10,11,12], foHourlyRate: [91,126,148,152,155,159,163,167,169,171,173,174], captHourlyRate: [0,235,236,238,240,242,244,246,248,250,252,254,256])])
]
}
struct HourlyRates: Identifiable {
let id: UUID
var year: [Int]
var foHourlyRate: [Double]
var captHourlyRate: [Double]
init(id: UUID = UUID(), year: [Int], foHourlyRate: [Double], captHourlyRate: [Double]) {
self.id = id
self.year = year
self.foHourlyRate = foHourlyRate
self.captHourlyRate = captHourlyRate
}
}
我的父母“PayRateView”应该导航到每个车队类型的多个子“RateDetailView”:
struct PayRateView: View {
var fleet: [Fleet]
var body: some View {
NavigationView {
List {
ForEach(fleet, id: \.fleetName) { plane in
NavigationLink(destination: RateDetailView(fleet: fleet)) {
Text(plane.fleetName)
}
}
}
.navigationTitle("Delta Fleet Pay Rates")
}
}
}
这是我的 PayRateDetailView:
struct RateDetailView: View {
var fleet: [Fleet]
var body: some View {
List {
ForEach (fleet, id: \.fleetName) { line in
RateCardView(fleet: fleet)
}
}
}
}
【问题讨论】:
标签: arrays list swiftui foreach