Sei que isso é algo muito novo para dizer, mas está me matando!
Este é meu código atual:
func WeatherAPI() async throws {
let parameters = [
"location": "Greenvale Victoria",
"fields": ["temperature"],
"units": "metric",
"timesteps": ["1h"],
"startTime": "2025-03-03T00:00:00+11:00",
"endTime": "nowPlus24h",
"dailyStartHour": 6,
"timezone": "Australia/Melbourne"
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.tomorrow.io/v4/timelines")!
var components = URLComponents(url: url, resolvingAgainstBaseURL: true)!
let queryItems: [URLQueryItem] = [
URLQueryItem(name: "apikey", value: "This ain't for you!"),
]
components.queryItems = components.queryItems.map { $0 + queryItems } ?? queryItems
var request = URLRequest(url: components.url!)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"accept": "application/json",
"Accept-Encoding": "deflate, gzip, br",
"content-type": "application/json"
]
request.httpBody = postData
let (data, temperature) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))
}
A declaração de impressão final retorna isto:
{"data":{"timelines":[{"timestep":"1h","endTime":"2025-03-04T13:00:00+11:00","startTime":"2025-03-03T00:00:00+11:00","intervals":[{"startTime":"2025-03-03T00:00:00+11:00","values":{"temperature":14.3}},{"startTime":"2025-03-03T01:00:00+11:00","values":{"temperature":13.9}},{"startTime":"2025-03-03T02:00:00+11:00","values":{"temperature":13.4}},{"startTime":"2025-03-03T03:00:00+11:00","values":{"temperature":13.1}},{"startTime":"2025-03-03T04:00:00+11:00","values":{"temperature":12.7}},{"startTime":"2025-03-03T05:00:00+11:00","values":{"temperature":12.5}},{"startTime":"2025-03-03T06:00:00+11:00","values":{"temperature":11.6}},{"startTime":"2025-03-03T07:00:00+11:00","values":{"temperature":11.3}},{"startTime":"2025-03-03T08:00:00+11:00","values":{"temperature":12.3}},{"startTime":"2025-03-03T09:00:00+11:00","values":{"temperature":14.4}},{"startTime":"2025-03-03T10:00:00+11:00","values":{"temperature":16.4}},{"startTime":"2025-03-03T11:00:00+11:00","values":{"temperature":17.6}},{"startTime":"2025-03-03T12:00:00+11:00","values":{"temperature":18.8}},{"startTime":"2025-03-03T13:00:00+11:00","values":{"temperature":19.7}},{"startTime":"2025-03-03T14:00:00+11:00","values":{"temperature":20.2}},{"startTime":"2025-03-03T15:00:00+11:00","values":{"temperature":20}},{"startTime":"2025-03-03T16:00:00+11:00","values":{"temperature":19.6}},{"startTime":"2025-03-03T17:00:00+11:00","values":{"temperature":19}},{"startTime":"2025-03-03T18:00:00+11:00","values":{"temperature":18.1}},{"startTime":"2025-03-03T19:00:00+11:00","values":{"temperature":17}},{"startTime":"2025-03-03T20:00:00+11:00","values":{"temperature":15.9}},{"startTime":"2025-03-03T21:00:00+11:00","values":{"temperature":15.3}},{"startTime":"2025-03-03T22:00:00+11:00","values":{"temperature":14.7}},{"startTime":"2025-03-03T23:00:00+11:00","values":{"temperature":14.2}},{"startTime":"2025-03-04T00:00:00+11:00","values":{"temperature":13.7}},{"startTime":"2025-03-04T01:00:00+11:00","values":{"temperature":13.3}},{"startTime":"2025-03-04T02:00:00+11:00","values":{"temperature":13.1}},{"startTime":"2025-03-04T03:00:00+11:00","values":{"temperature":12.7}},{"startTime":"2025-03-04T04:00:00+11:00","values":{"temperature":12.3}},{"startTime":"2025-03-04T05:00:00+11:00","values":{"temperature":11.9}},{"startTime":"2025-03-04T06:00:00+11:00","values":{"temperature":11.5}},{"startTime":"2025-03-04T07:00:00+11:00","values":{"temperature":11.2}},{"startTime":"2025-03-04T08:00:00+11:00","values":{"temperature":12.3}},{"startTime":"2025-03-04T09:00:00+11:00","values":{"temperature":14.9}},{"startTime":"2025-03-04T10:00:00+11:00","values":{"temperature":17.3}},{"startTime":"2025-03-04T11:00:00+11:00","values":{"temperature":20.6}},{"startTime":"2025-03-04T12:00:00+11:00","values":{"temperature":24.8}},{"startTime":"2025-03-04T13:00:00+11:00","values":{"temperature":28}}]}]}}
Embora retorne os dados que pedi, eu só quero números, não todo esse outro lixo. Idealmente, eu gostaria de ter algo como
if let value in data = APIDATA {
print(value[1]) /// the first temperature recorded
print(value[2]) /// the second temperature recorded
print(value[3]) /// the third temperature recorded
}