You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:14:30