Почему отображается пустой массив при добавлении данных из сети?

swift
ios

#1

Помогите разобраться. Я получаю массив с данными от Json, для дальнейшей работы в ViewControllere я хочу передать данные в пустой массив.Но при ввыводе в консоль получаю “Болт” - пустой массив. Почему так происходит? Как по правильному передать данные в пустой массив.


#2

Потому что у вас действие выполняется асинхронно, т.е. не дожидается предыдущего действия, пока оно выполнится.
В таких случаях (с запросами) нужно добавлять callback или замыкание, которое вернет результат запроса.


#3

А можно чуть - чуть поподробнее?) Я новичок, мне пока что сложно воспринимать то что вы написали)


#4

Для начала вставляйте код не скрином. Тут есть кнопочка 46 что бы вставить код красиво с форматированием, так будет проще всем.

Далее, ваш код во viewDidLoad
fetchData() и print() срабатывают практически одновременно, т.е. принт не ждет когда у вас закончит работу получение данных из сети. Что бы этого избежать, в методе fetchData нужно сделать замыкание (callback). Это такая конструкция, которая будет что-то выполнять внутри вашего метода в том месте, где вы это вызовете. В данном случае вам нужно сделать принт данных по завершению.

func fetchData(completion: () -> ()) {
    ...
    self.array = ...
    // вот в этом месте нужно вызывать completion()
    completion()
}

Использование метода немного изменится на такой вид

fetchData {
    print(self.newArray.count)
}

Замыкания могут как принимать на вход что-то, так же и возвращать данные. В данном примере этого нет.
Можете поискать на сайте в копошилке работу с запросами или в гугле, там будет все показано.


#5

Спасибо большое! Благодаря вам все получилось! Я два дня не мог понять - сдаваться конечно же не хотелось. Еще раз спасибо! Буду учить мат часть…