我尝试在这里使用图表比较两个核心数据实体。我进入一个俱乐部的详细视图,其中显示了该俱乐部的击球图表。当我从选择器中选择另一个球杆时,它应该以不同的颜色在图表上显示球杆的击球。有时它可以工作,但其他时候(似乎是随机的)它会使应用程序崩溃,并且我收到一条错误消息,显示
swift/ContiguousArrayBuffer.swift:600: Fatal error: Index out of range
。
struct ClubCompareChartView: View {
var club: Club
var compareClub: Club?
var body: some View {
Chart(0..<(club.strokesList.count), id: \.self) { nr in
PointMark(
x: .value("X value", nr),
y: .value("Y value", club.strokesList[nr])
)
if compareClub != nil{
PointMark(
x: .value("X value", nr),
y: .value("Y value", compareClub!.strokesList[nr])
).foregroundStyle(.blue)
}
}
}
}
有很多方法可以避免索引崩溃。
您可以尝试使用
indices
而不是范围 and
测试超出范围的索引,如示例代码所示。
您也可以使用
enumerated()
来实现您想要的。
struct ClubCompareChartView: View {
var club: Club
var compareClub: Club?
var body: some View {
Chart(club.strokesList.indices, id: \.self) { nr in // <-- here
PointMark(
x: .value("X value", nr),
y: .value("Y value", club.strokesList[nr])
)
if compareClub != nil && nr < compareClub!.strokesList.count { // <-- here
PointMark(
x: .value("X value", nr),
y: .value("Y value", compareClub!.strokesList[nr])
).foregroundStyle(.red)
}
}
}
}