Swift Chart出现额外跨点连线问题求助
Swift Chart出现额外跨点连线问题求助
嘿,我看你在Swift Charts里遇到那条莫名其妙的跨点连线了,这问题我之前也碰过,来帮你捋捋~
问题根源
你现在的代码是在ForEach循环里给每个数据点单独生成LineMark,这就相当于告诉Chart:每个点都是独立的小折线系列。Chart在处理的时候,就会错误地把这些独立系列的首尾连起来,就出现了你看到的那条奇怪的跨线。另外你外层Chart传的是原始数组,ForEach又遍历反转后的数组,数据顺序和分组逻辑也有点混乱,雪上加霜了。
修正方案
咱们调整下代码逻辑,把数据过滤提前,并且让Chart把所有点当成同一个折线系列来处理:
var ChartView: some View { // 先提前计算3个月前的时间,过滤出符合条件的数据 let threeMonthsAgo = Calendar.current.date(byAdding: .month, value: -3, to: Date())! let filteredData = genRtrv.TUHist_Chart.reversed().filter { $0.Timestamp > threeMonthsAgo } return HStack { Chart(filteredData) { data in // 只用一个LineMark,Chart会自动遍历所有数据点连成完整折线 LineMark( x: .value("Date", data.Timestamp, unit: .day), y: .value("Thumbs Up", data.TU) ) // 保留每个点的标记 PointMark( x: .value("Date", data.Timestamp, unit: .day), y: .value("Thumbs Up", data.TU) ) } } }
关键调整点
- 提前过滤数据:把符合“3个月内”条件的数据先筛选出来,避免在Chart的循环逻辑里重复计算,也让Chart的数据源更清晰。
- 移除嵌套ForEach:直接把过滤后的数组传给Chart,让它自动识别这是一个完整的折线系列,不用手动循环生成每个LineMark。
- 统一折线系列:单个LineMark就能绑定所有数据点的x/y值,Chart会自动按顺序把它们连成正常的折线,不会再出现跨点连线。
另外提个小建议:如果你的原始数据已经是按时间正序排列的,那reversed()可能可以去掉,确保数据是按时间先后顺序展示的,折线连接会更合理~
备注:内容来源于stack exchange,提问作者WPD2050
相关产品推荐
相关产品推荐

