Вот моя структура данных:
Код: Выделить всё
struct HistoryAPIResponse: Codable {
let data: [Events]
}
struct Events: Codable {
let year: String
let text: String
let html: String
}
Код: Выделить всё
import Foundation
import UIKit
final class HistoryAPICaller {
static let shared = HistoryAPICaller()
struct Constants {
static let topHeadLinesURL = URL(string:
"http://history.muffinlabs.com/date/4/19"
)
static let searchUrlString =
"http://history.muffinlabs.com/date/4/19"
}
private init() {}
public func getTopStories(completion: @escaping (Result) -> Void) {
guard let html = Constants.topHeadLinesURL else {
return
}
let task = URLSession.shared.dataTask(with: html) { data, _, error in
if let error = error {
completion(.failure(error))
}
else if let data = data {
do {
_ = try JSONDecoder().decode(HistoryAPIResponse.self, from: data)
}
catch {
completion(.failure(error))
}
}
}
task.resume()
}
public func search(with query: String, completion: @escaping (Result) -> Void) {
guard !query.trimmingCharacters(in: .whitespaces).isEmpty else {
return
}
let urltring = Constants.searchUrlString + query
guard let html = URL(string:urltring) else {
return
}
let task = URLSession.shared.dataTask(with: html) { data, _, error in
if let error = error {
completion ( .failure(error))
}
else if let data = data {
do {
_ = try JSONDecoder().decode(HistoryAPIResponse.self, from: data)
}
catch {
completion (.failure(error))
}
}
}
task.resume()
}
}
typeMismatch(Swift.Array, Swift.DecodingError.Context (codingPath: [CodingKeys(stringValue: "data", intValue: nil)], debugDescription: "Ожидал декодирование Array, но вместо этого обнаружил словарь.", базовая ошибка: ноль))
Я вроде понимаю суть проблемы, что данные - это словарь, но как ее решить, учитывая это, не знаю это структура API, в которой все хранится в [data].
Есть идеи, как решить эту проблему? Заранее благодарим за помощь.
Подробнее здесь: https://stackoverflow.com/questions/676 ... ry-instead
Мобильная версия