我正在學習 Swift 并嘗試根據來自 Open Elevation API 的坐標獲取高程資料。
我找到了一個代碼來發出請求并使用結構解碼資料。
我的問題是 API 結果包含陣列中的資訊:
{"results": [{"latitude": 41.161758, "longitude": -8.583933, "elevation": 117}]}
到目前為止我能夠編程的內容確實將資料保存為 json.results 中的陣列,但只有一個索引包括所有資料:
[API.MyResult(latitude: 41.16176, longitude: -8.583933, elevation: 117)]
(“API”是檔案名)
這是我的代碼:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let url = "https://api.open-elevation.com/api/v1/lookup?locations=41.161758,-8.583933"
getData(from: url)
}
private func getData(from url: String){
let task = URLSession.shared.dataTask(with: URL(string: url)!, completionHandler: {data, response, error in
guard let data = data, error == nil else {
print("error")
return
}
var result: Response?
//print(result)
do{
result = try JSONDecoder().decode(Response.self, from: data)
}
catch{
print(error.localizedDescription)
}
guard let json = result else {
return
}
print(json.results)
//print(json.results.latitude)
//print(json.results.longitude)
//print(json.results.elevation)
})
task.resume()
}
}
struct Response: Codable {
let results: [MyResult]
}
struct MyResult: Codable {
let latitude: Float
let longitude: Float
let elevation: Int
}
試圖列印出 json.results.latitude 會導致錯誤
"Value of type '[MyResult]' has no member 'latitude'"
我假設在某些時候,必須將變數定義為陣列。
這里需要改變什么?
uj5u.com熱心網友回復:
result確實是單個物件,但屬性results是一個陣列(多個物件)。
稍微不同的命名可以避免混淆。
筆記:
永遠不要列印文字
"error"或error.localizedDescription在解碼背景關系中,始終列印error實體。繼續決議
do作用域內的結果private func getData(from url: String){ guard let url = URL(string: url) else { print("Bad URL", url); return } let task = URLSession.shared.dataTask(with: url) {data, _, error in if let error = error { print(error); return } do { let response = try JSONDecoder().decode(Response.self, from: data!) for result in response.results { print(result.latitude) print(result.longitude) print(result.elevation) } } catch { print(error) } } task.resume() }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/376762.html
上一篇:通過子字串過濾或減少字串陣列
