Swift сопоставьте массив структур со свойствами строки и массива структур - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь извлечь некоторые данные о погоде из ответа JSON. API - это что-то вроде PITA, и его структура, по сути, такова:

   "forecast":{
    "2019-09-07":{
     "date_epoch":1567814400,
     "hourly":[
        {
           "time":"0",
           "temperature":18,
           "humidity":68
        },
        {
           "time":"1",
           "temperature":18,
           "humidity":68
        },
        ...
     ]
  }

В результате я получаю такой массив словарей:

struct Forecast: Codable {
   let forecastDate: Double? //This is a UTC time code
   let hourly: [Hourly]?
}

Почасовой структура, определенная как:

struct Hourly: Codable {
  let time: String?  //This is the number of hourly periods past the forecastDate above starting at "0"
  let temperature: Double?
  let humidity: Int?
}

Я пытаюсь сопоставить ее с массивом структур, определенных следующим образом:

struct ForecastPeriod {
  let startTime: Date?
  let temperature: Measurement<UnitTemperature>?
  let humidity: Int?    
}

Проблема в том, что я не могу понять как сопоставить Forecast с ForecastPeriod, поскольку мне нужно сопоставить Forecast.forecastDate с каждым Hourly и выгрузить все в [ForecastPeriod], потому что мне нужна дата из Forecast плюс количество часов в Hourly, умноженное на время. По сути, моя формула предназначена для каждой из часовых структур, которые мне нужно создать:

ForecastPeriod.startTime = Forecast.forecastDate + timeInterval(Double(Hourly.time) * 86400.0)

Я просто не могу понять, как сопоставить эту часть. Остальное просто и можно сделать

Hourly.map { ForecastPeriod(startTime: Date(timeIntervalSince1970: THIS IS THE ISSUE), temperature: Measurement(value: $0.temp, unit: UnitTemperature.fahrenheit), humidity: $0.humidity) }
...