我知道这是新手才会说的话,但它真的让我难以忍受!
这是我当前的代码:
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))
}
最后的打印语句返回以下内容:
{"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}}]}]}}
尽管它返回了我要求的数据,但我只想要数字,而不是其他垃圾。理想情况下,我只想得到类似
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
}
为了获得您想要的温度,请尝试使用这种方法
JSONDecoder
以及通过使用获得的适当模型结构,https://app.quicktype.io/
如示例代码所示:以及模型结构,根据需要调整属性:
以下是使用 SwiftUI 显示结果的完整且更紧凑的示例代码。此示例使用带有完成处理程序的函数 (getTemperatures) 来实现您想要的效果。
编辑-1:
要隔离函数以仅返回所需温度作为 [Double],请使用以下命令:
在 Swift 中像这样使用: