Если вы просматриваете список элементов, возвращаемых с сервера в массиве JSON, последний элемент имеет единственное имя.Нет доступных полей id, link, imageUrl или number_of_lessons.Чтобы соответствовать этому сценарию, вам необходимо сделать идентификатор и ссылку необязательными, добавив ?
.Если вы не много знаете об опционах, я советую вам прочитать эту статью на среднем .
когда вы анализируете JSON и извлекаете массив курсов, вам не нужно получать доступ к данным JSON, которые вы использовали для анализа.Поскольку у вас есть много читаемых объектов курсов внутри массива, просто получите к нему доступ с помощью индекса.Вот для примера, я получил 0-й индекс, набрав print(course[0].link)
.
Кстати, пожалуйста, не обращайтесь к элементам напрямую, используя индекс в готовом к использованию коде, потому что вы никогда не знаете, сколько элементов было возвращено с сервера.
ваш код должен выглядеть примерно таккак показано ниже.
import UIKit
struct jsondata: Decodable {
let id: Int?
let name: String
let link: String?
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let jsonUrlString = "https://api.letsbuildthatapp.com/jsondecodable/courses_missing_fields"
guard let url = URL(string: jsonUrlString) else {return}
let dataTask = URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else {return}
do{
let course = try JSONDecoder().decode([jsondata].self, from: data)
print(course[0].link)
// print(jsondata.link)
}
catch let jsonerr{
print("error serilizing",jsonerr)
}
}
dataTask.resume()
}
}