Декодирование данных APIIOS

Программируем под IOS
Ответить
Anonymous
 Декодирование данных API

Сообщение Anonymous »

Я пытаюсь получить данные из API, но не могу сделать это правильно и не знаю, в чем проблема:

Код: Выделить всё

struct BTCData : Codable {
let close : Double
let high : Double
let low : Double

private enum CodingKeys : Int, CodingKey {
case close = 3
case high = 4
case low = 5
}
}

func fetchBitcoinData(completion: @escaping (BTCData?, Error?) -> Void) {
let url = URL(string: "https://api.bitfinex.com/v2/candles/trade:30m:tBTCUSD/hist")!

let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else { return }
do {
if let bitcoin = try JSONDecoder().decode([BTCData].self, from: data).first {
print(bitcoin)
completion(bitcoin, nil)
}
} catch {
print(error)
}
}
task.resume()
}
Я бы хотел получить доступ к Close в каждом DICT и итерации как это:
< Br />

Код: Выделить всё

var items : BTCData!

for idx in 0..

Я получаю nil < /code>. Я не понимаю, как декодировать этот вид API, где мне нужно повторить что -то, что не находится внутри другого DICT < /code>. < /P>

[b] edit: The Выше было решено, и теперь я изо всех сил пытаюсь использовать [btcdata] в другой функции. [/b] 

Я пытаюсь использовать его здесь: 
func fetchBitcoinData(completion: @escaping ([BTCData]?, Error?) -> Void) {

let url = URL(string: "https://api.bitfinex.com/v2/candles/trade:30m:tBTCUSD/hist")!

let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else {
completion(nil, error ?? FetchError.unknownNetworkError)
return
}
do {
let bitcoin = try JSONDecoder().decode([BTCData].self, from: data); completion(bitcoin, nil)
//let close52 = bitcoin[51].close
//print(bitcoin)
//print(close52)
} catch let parseError {
completion(nil, parseError)
}
}
task.resume()
}
class FindArray {

var items = [BTCData]()

func findArray() {
let close2 = items[1].close
print(close2)
}
}

fetchBitcoinData() { items, error in
guard let items = items,
error == nil else {
print(error ?? "Unknown error")
return
}
let call = FindArray()
call.items = items
call.findArray()
}
< /code>

[b] edit 2: Решено с помощью [btcdata] () < /code>.  элементы var: [btcdata] = [] 
тоже работает [/b]

Подробнее здесь: https://stackoverflow.com/questions/486 ... g-api-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»