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] = []
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() } [/code]
Я бы хотел получить доступ к Close в каждом DICT и итерации как это: < Br />[code]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) } }