返回
在 WeatherKit 中绘制过去 10 天到今天的温度曲线图:你的问题解答
IOS
2024-03-16 09:42:33
在 WeatherKit 中绘制 10 天前到今天的温度曲线图
问题
我们希望使用 WeatherKit 创建一个图表,展示从当前日期前 10 天到今天的环境温度变化。然而,默认情况下,WeatherKit 仅提供从今天开始的 10 天预报。
解决方案
过滤每日预报
为了解决这个问题,我们可以通过 WeatherKit 提供的 dailyForecast
数组,对过去 10 天的预报进行过滤:
extension WeatherData {
var last10DaysForecast: [DayWeather] {
let calendar = Calendar.current
guard let tenDaysAgo = calendar.date(byAdding: .day, value: -10, to: Date()) else { return [] }
return dailyForecast.filter {
let isBeforeToday = $0.date < Date()
let isAfterTenDaysAgo = $0.date >= tenDaysAgo
return isBeforeToday && isAfterTenDaysAgo
}
.sorted { $0.date < $1.date }
}
}
使用解决方法
在你的代码中,导入 WeatherData 扩展:
import WeatherData
然后,使用 last10DaysForecast
计算属性来获取过去 10 天的预报:
let last10DaysForecast = WeatherData.shared.last10DaysForecast
图表绘制
有了过去 10 天的预报后,你就可以创建一个图表来绘制温度曲线了。例如,使用 Charts 框架:
struct DailyForecastChartView: View {
var dailyForecast: [DayWeather]
var body: some View {
Chart {
ForEach(dailyForecast, id: \.date) { day in
let averageTemp = (day.highTemperature.value + day.lowTemperature.value) / 2
LineMark(
x: .value("Day", day.date, unit: .day),
y: .value("High Temperature", averageTemp)
)
.foregroundStyle(.green)
}
.symbol(Circle().strokeBorder())
.interpolationMethod(.catmullRom)
}
.chartXAxis {
AxisMarks(preset: .aligned, position: .bottom)
}
.chartYAxis {
AxisMarks(preset: .aligned, position: .leading)
}
}
}
结论
通过使用 WeatherKit 的 dailyForecast
数组和对其进行过滤,我们可以成功创建显示过去 10 天到今天的环境温度曲线图。
常见问题解答
Q1:我可以获取超过 10 天的预报吗?
A:目前,WeatherKit 仅提供 10 天的预报。
Q2:图表可以自定义吗?
A:是的,你可以使用 Charts 框架提供的各种自定义选项来调整图表的样式和外观。
Q3:如何处理时区问题?
A:WeatherKit 自动处理时区转换,以提供与用户当前时区相符的预报。
Q4:这个解决方案兼容哪些 iOS 版本?
A:这个解决方案需要 iOS 16 或更高版本才能使用。
Q5:我可以将此解决方案用于商业应用程序吗?
A:是的,WeatherKit 的使用条款允许你在商业应用程序中使用此解决方案。