Данные, которые вы выбираете, - это JSON.Для того, чтобы использовать его, вам придется декодировать его.В Swift рекомендуется использовать JSONDecoder
.
Сначала вам нужно определить свою модель, соответствующую модели данных, и настроить ее на соответствие протоколу Codable
:
struct App: Codable {
var sellerName: String
// Alternatively, if you don't want to use an enum, you can use a String.
var currency: Currency
enum Currency: String, Codable {
case australianDollar = "AUD",
case britishPound = "GBP",
case euro = "EUR",
case hongKongDollar = "HKD",
case usDollar = "USD"
// Complete this with all the currency…
}
}
struct JSONResult: Codable {
var resultCount: Int
var results: [App]
}
Как только это будет сделано, вам нужно только отредактировать свой метод fetchData
, чтобы он возвращал массив App
, заполненный данными, которые вы выбрали.
Версия Swift 4:
func fetchData(completion: @escaping (JSONResult?, Error?) -> Void) {
guard let url = URL(string: link) else { return }
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
completion(nil, error)
return
} else if let data = data {
do {
let decoder = JSONDecoder()
let result = try decoder.decode(JSONResult.self, from: data)
completion(result, nil)
} catch {
print(error)
completion(nil, error)
}
}
}
task.resume()
}
Версия Swift 5 с использованием типа Result
:
func fetchData(completion: @escaping (Result<JSONResult, Error>) -> Void) {
guard let url = URL(string: link) else { return }
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
completion(.failure(error))
return
} else if let data = data {
do {
let decoder = JSONDecoder()
let result = try decoder.decode(JSONResult.self, from: data)
completion(.success(result))
} catch {
print(error)
completion(.failure(error))
}
}
}
task.resume()
}
Дополнительная информация о JSONDecoder