我正在创建一个简单的iOS应用程序,我使用以下函数从API(开源(获取数据:
private func fetchCurrencies() {
if let url = URL(string: "http://data.fixer.io/api/latest?access_key=a5b8f8bd7583e32252946741********"){
let session = URLSession(configuration: .default)
let task = session.dataTask(with: url) { data, response, error in
guard error == nil else{
return
}
if let data = data {
let decoder = JSONDecoder()
do {
let decodedData = try decoder.decode(Rates.self, from: data)
let array = decodedData.rates
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch {
print("error decoding")
}
}
}
task.resume()
}
}
数据模型为:
struct Rates: Codable {
let rates: [String: Double]
}
以下是我的API数据的一部分:
"success": true,
"timestamp": 1590762665,
"base": "EUR",
"date": "2020-05-29",
"rates": {
"AED": 4.08666,
"AFN": 85.22449,
"ALL": 124.556499,
"AMD": 538.156223,
"ANG": 1.996181,
"AOA": 645.803727,
"ARS": 76.250753,
"AUD": 1.672917,
"AWG": 2.002692,
"AZN": 1.896163,
"BAM": 1.95413,
"BBD": 2.245466,
"BDT": 94.371782,
// and so on .....
获取数据工作正常,我收到了汇率,但我无法弄清楚如何在我的表格视图中发布这些数据(例如:单元格文本货币和单元格详细信息文本作为汇率(我也觉得我的模型没有按照预期的那样结构化,所以正确的方法应该是获取汇率数据并在我的表视图中发布它们作为数据建模, 获取它们并表单元格数据插入。
以下是我将数组打印到控制台时出现的部分内容:
▿ 168 elements
▿ 0 : 2 elements
- key : "HKD"
- value : 8.615716
▿ 1 : 2 elements
- key : "IMP"
- value : 0.900216
▿ 2 : 2 elements
- key : "ZWL"
- value : 357.865214
▿ 3 : 2 elements
- key : "LBP"
- value : 1676.38247
我希望我说清楚了,
提前谢谢你,
使用此代码将所有字典合并为一个字典
let flattenedArray = array
.flatMap { $0 }
.reduce([String:String]()) { (var dict, tuple) in
dict.updateValue(tuple.1, forKey: tuple.0)
return dict
}
接下来,你可以像下面一样使用扁平阵列
var i: Int = 0
//use i as a counter
while i < 168 {
self.arrayOfRates.append(Array(flattenedArray)[i].value)
self.arrayOfCurrency.append(Array(flattenedArray)[i].key)
i = i + 1
}
然后使用 arrayOfRates 作为单元格详细信息和 arrayOfCurrency 作为单元格文本来设置您的表视图。
如果您需要有关设置表格的帮助查看观看此视频 https://www.youtube.com/watch?v=cJUmrdfgbbA