URL-адрес, который я использовал, был "https://www.reddit.com/subreddits/.json", который предоставит вам формат JSON Субредитов Reddit.
Мои модели кодируемой структуры следующие:
struct SubredditsData: Codable {
let data: SubredditData
}
struct SubredditData: Codable {
let children: [Children]
}
struct Children: Codable {
let data: ChildrenData
}
struct ChildrenData: Codable {
let title: String
let icon_img: String
let display_name_prefixed: String
let name: String
}
и, конечно, Модель для Subreddit
struct SubredditsModel {
let title: String
let display_name_prefixed: String
let name: String
}
Затем я выполнил запрос и сам фактический анализ
func parseSubRedditsJSON(_ subredditsRawData: Data) -> [SubredditsModel]? {
let decoder = JSONDecoder()
do {
var subReddits = [SubredditsModel]()
let decodedData = try decoder.decode(SubredditsData.self, from: subredditsRawData)
let data = decodedData.data
let children = data.children
for item in children {
let childrenData = item.data
let title = childrenData.title
let display_name_prefixed = childrenData.display_name_prefixed
let name = childrenData.name
let subReddit = SubredditsModel(title: title, display_name_prefixed: display_name_prefixed, name: name)
subReddits.append(subReddit)
}
return subReddits
} catch {
subredditsDelegate?.didFailWithError(error: error)
return nil
}
}//end of parseSubRedditsJSON
Я возвращаю данные в представление контроллер из диспетчера запросов через делегат протокола, который работает нормально. Проблема в том, что я получаю сообщение об ошибке в этой строке
let decodedData = try decoder.decode(SubredditsData.self, from: subredditsRawData)
В сообщении об ошибке говорится:
valueNotFound(Swift.String, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "data", intValue: nil),
CodingKeys(stringValue: "children", intValue: nil), _JSONKey(stringValue: "Index 5", intValue: 5),
CodingKeys(stringValue: "data", intValue: nil),
CodingKeys(stringValue: "icon_img", intValue: nil)],
debugDescription: "Expected String value but found null instead.", underlyingError: nil))
Я, должно быть, что-то упустил или не реализовал правильный способ синтаксического анализа используя Swift codable.