19
Jun
2022
SwiftUI Charts - Converting AxisValue to Text
Reading time: 1 min
This quick recipe shows how to convert AxisValue to a Text using Apple's new Charts Framework.
The end result looks like this:

Charts framework is available starting in SwiftUI 4 (iOS 16, macOS 12.4).
When you construct X or Y axis in SwiftUI charts using chartXAxis or chartYAxis, you usually pass the AxisMarks result builder. It provides its block with an AxisValue instance the represents the current axis mark. However, it only knows its index and total count - but not its actual value.
The key is to cast the value to a primitive with as(:) method. The example below plots integers on the Y axis, so cast to Int.self is correct:
Chart {
// ...
}
.chartYAxis {
AxisMarks(values: .automatic) { value in
AxisGridLine(centered: true, stroke: StrokeStyle(dash: [1, 2]))
.foregroundStyle(Color.cyan)
AxisTick(centered: true, stroke: StrokeStyle(lineWidth: 2))
.foregroundStyle(Color.red)
AxisValueLabel() {
if let intValue = value.as(Int.self) { // HERE
Text("\(intValue) km")
.font(.system(size: 10))
.foregroundColor(.blue)
}
}
}
}