返回

在 WeatherKit 中绘制过去 10 天到今天的温度曲线图:你的问题解答

IOS

在 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 的使用条款允许你在商业应用程序中使用此解决方案。