swift4 - 试图在 swift 4 中使用可编码协议在 JSON Api 中显示所有驱动程序名称
问题描述
我正在使用 F1 API 并希望在 swift 项目中显示所有驱动程序名称。我正在使用可编码协议,并且我了解如何从 JSON API 访问一个名称或属性。只是如果我想从该 JSON API 访问所有选定的属性。我尝试了无数不同的方法来实现这一目标,但收效甚微。下面是我的代码。
struct MRData: Codable {
let xmlns: String
let series: String
let url: String
let limit, offset, total: String
let standingsTable: StandingsTable
enum CodingKeys: String, CodingKey {
case xmlns, series, url, limit, offset, total
case standingsTable = "StandingsTable"
}
}
struct StandingsTable: Codable {
let season: String
let standingsLists: [StandingsList]
enum CodingKeys: String, CodingKey {
case season
case standingsLists = "StandingsLists"
}
}
struct StandingsList: Codable {
let season, round: String
let driverStandings: [DriverStanding]
enum CodingKeys: String, CodingKey {
case season, round
case driverStandings = "DriverStandings"
}
}
struct DriverStanding: Codable {
let position, positionText, points, wins: String
let driver: Driver
let constructors: [Constructor]
enum CodingKeys: String, CodingKey {
case position, positionText, points, wins
case driver = "Driver"
case constructors = "Constructors"
}
}
struct Constructor: Codable {
let constructorId: String
let url: String
let name: String
let nationality: String
}
struct Driver: Codable {
let driverId: String
let url: String
let givenName, familyName, dateOfBirth, nationality: String
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let jsonUrlString = "https://ergast.com/api/f1/1981/driverstandings.json"
guard let url = URL(string: jsonUrlString) else { return }
URLSession.shared.dataTask(with: url) { (data, response, err) in
guard let data = data else { return }
do {
let f1Data = try JSONDecoder().decode(F1Data.self, from: data)
let season = f1Data.mrData.standingsTable.season
print(f1Data.mrData.standingsTable.standingsLists[0].
driverStandings[1].driver.familyName)
print(season)
} catch {
print(error)
}
}.resume()
}
任何帮助,将不胜感激。
解决方案
添加一个 for 循环。
let firstDriver = f1Data.mrData.standingsTable.standingsLists[0].driverStandings
for driver in firstDriver {
//print(firstDriver)
print(driver.driver.familyName)
}
推荐阅读
- javascript - MVC5 控制器未接收 ajax 发布的 html 内容
- c# - 如何在 C# 中提高 sqlite 写入性能
- c++ - 调用 'std::vector 没有匹配的函数
::push_back(节点*&)' - mysql - 从具有三个不同列的三个不同表中搜索
- javascript - 只有双击才会发生事件
- r - 在 Rstudio 中创建分层分组时间序列
- javascript - Set-Cookie 在 Chrome 中不起作用 - 有两个网站
- c++ - 为什么 C++ (Visual Studio) 数据类型没有停止在其限制上?
- c - 指针操作产生意外结果
- .net - 有没有办法从注册表协议处理程序中隐藏“打开 Windows 命令处理器”提示?