Попробуйте, вы должны использовать Codable, поскольку это делает это намного проще.
При построении этих структур родительская структура просматривает данные, используя постоянное имя, поэтому, например, пусть id, вы получите часть данных «id». Затем я построил другую структуру, так что когда она проходит через дочерние элементы, она будет делать то же самое внутри, используя эту структуру.
struct Parent: Codable {
let id: Int
let parent_id: Int?
let name: String
let notes: String?
let children: [Child]?
}
struct Child: Codable {
let id: Int
let parent_id: Int?
let name: String
let notes: String?
}
тогда вам нужна переменная для хранения этих данных:
var completeData = [Parent]()
и в вашем звонке:
do {
let dataParsed = try JSONDecoder().decode([Parent].self, from: data
self.completeData = dataParsed
} catch {
print(error)
}
и получить к нему доступ, вы сможете сделать
var accessingID = self.completeData[0].id
и для ребенка:
var accessingChild = self.completeData[0].children.id
Я не уверен, как вам нужны данные, так что вы можете возиться с тем, как вы обрабатываете массивы, и я не смог протестировать, но это должно быть в этом духе.
Помните, что в структурах вам нужно использовать ?
, если возможно, что значение будет нулевым. Этот метод также не использует Alamofire или SwiftyJSON, так как Codable делает его намного более быстрым и удобным для выполнения подобных задач с использованием структур.