На основании моей модели я могу
print(crypto, name, price ?? 0.0, totalSupply ?? 0.0)
// BTC Bitcoin 7639.39 17070625.0
// ETH Ethereum 590.943 99826611.0
// all 99 currencies
Я вынужден распечатать все 99 валютв API.Я хочу иметь возможность вишневый пик определенных валют.
Словарь "1" соответствует BTC, а словарь "1021" соответствует ETH.Они не совпадают с ключами "id", но имеют одинаковые числовые значения.
Лучше просто найти элемент "id", а затем использовать условие, которое говорит, что если найдена пара значений ключа "id":1
или "id":1027
, вывести все значения в этом словаре?Нужно ли мне карту?Простое условие?
Цель состоит в том, чтобы иметь возможность выбрать одну валюту, т.е. ETH / 1027 и напечатать одну строку, которая в конечном итоге будет помещена в некоторый видТаблица позже.
BTC | Bitcoin | 7639.39 | 17070625.0
Контроллер
for (crypto, base) in rawResponse.data {
if let name = base.name {
let price = base.quotes["USD"]?.price
let totalSupply = base.totalSupply
print(crypto, name, price ?? 0.0, totalSupply ?? 0.0)
}
}
Модель JSON
struct RawServerResponse : Codable {
var data = [String:Base]()
private enum CodingKeys: String, CodingKey {
case data
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let baseDictionary = try container.decode([String:Base].self, forKey: .data)
baseDictionary.forEach { data[$0.1.symbol] = $0.1 }
}
}
struct Base : Codable {
let name : String?
let symbol : String
let quotes : [String: Quotes]
}
struct Quotes : Codable {
let price : Double?
let volume24H : Double?
}
JSON
"data": {
"1": {
"id": 1,
"name": "Bitcoin",
"symbol": "BTC",
"website_slug": "bitcoin",
"rank": 1,
"circulating_supply": 17069825.0,
"total_supply": 17069825.0,
"max_supply": 21000000.0,
"quotes": {
"USD": {
"price": 7663.22,
"volume_24h": 4898370000.0,
"market_cap": 130809824337.0,
"percent_change_1h": 2.1,
"percent_change_24h": 1.17,
"percent_change_7d": 2.17
}
},
"last_updated": 1527925172
},
"1027": {
"id": 1027,
"name": "Ethereum",
"symbol": "ETH",
"website_slug": "ethereum",
"rank": 2,
"circulating_supply": 99817109.0,
"total_supply": 99817109.0,
"max_supply": null,
"quotes": {
"USD": {
"price": 589.299,
"volume_24h": 1841640000.0,
"market_cap": 58822122295.0,
"percent_change_1h": 1.9,
"percent_change_24h": 0.93,
"percent_change_7d": -0.96
}
}