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

Swift Charts中ChartYAxis是否支持显示Double类型数值?

Swift Charts中x/y的.value参数支持Double类型吗?

问题描述

在Swift Charts框架中,x/y的.value参数能否传入Double类型,还是只能使用整数类型?我正在制作一个Y轴显示小时的图表,小时数值由小时数加分钟数转换为小数形式(例如1小时30分钟表示为1.5),但目前图表似乎仅支持整数,无法识别Double类型。请问是否可以直接使用Double类型,还是需要采用变通方案?

代码示例

Chart{
        ForEach(sunriseSunset) {item in
            LineMark(
                x: .value("Date", item.sunrise),
                y: .value("Sunrise", (((Calendar.current.dateComponents(components, from: item.sunrise).hour!) * 60) + (Calendar.current.dateComponents(components, from: item.sunrise).minute!))  / 60),
               // y: .value("Sunrise", (((Calendar.current.dateComponents(components, from: item.sunrise).hour!)) + (Calendar.current.dateComponents(components, from: item.sunrise).minute!)) * minsdecimal),
                series: .value("Date", "Sunrise")
            )
            .foregroundStyle(.orange)
            .lineStyle(StrokeStyle(lineWidth: 2))
        }
    }
    .frame(height: 300)
    .chartYAxis {
        AxisMarks(
            values: [0, 6, 12, 18, 24]
        )
    }
}

解答

Swift Charts的.value参数完全支持Double类型,你遇到的问题不是框架不支持,而是代码中的整数除法导致结果被截断成了整数。

你的计算式(((hour! * 60) + minute!)) / 60里,hour和minute都是Int类型,所有运算都基于整数执行,除以60时会直接舍弃小数部分(比如90/60得到1而不是1.5),最终传给.value的是Int值,自然图表只显示整数刻度。

修正方案

只需要把除法改成浮点除法即可,有两种简单方式:

  • 将计算结果转换为Double:
y: .value("Sunrise", Double(((Calendar.current.dateComponents(components, from: item.sunrise).hour! * 60) + Calendar.current.dateComponents(components, from: item.sunrise).minute!)) / 60)
  • 使用浮点常量60.0进行除法:
y: .value("Sunrise", (((Calendar.current.dateComponents(components, from: item.sunrise).hour! * 60) + Calendar.current.dateComponents(components, from: item.sunrise).minute!)) / 60.0)

修正后,传给.value的就是Double类型的数值,图表会正确识别1.5这类小数。另外你也可以修改AxisMarks的values数组,加入小数刻度(比如[0, 6, 12, 18, 24, 1.5])来验证效果。

内容的提问来源于stack exchange,提问作者Edward Hasted

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:42:56