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
相关产品推荐
相关产品推荐

