Таким образом, проблема, с которой вы сталкиваетесь, заключается в асинхронных вызовах. Вы правы, viewDidLoad - это первое, что вызывается. Проблема в том, что ваш query.findinbackgroundwithblock является фоновой задачей. Это означает, что задача будет выполняться и завершаться всякий раз, когда позволяет сеть. Без фоновой задачи код обычно запускается одна строка за другой. Этот конкретный вызов говорит устройству не ждать его завершения, прежде чем двигаться дальше. Это приводит к тому, что println «вне цикла for» будет вызываться еще до того, как ваш цикл начнется. Когда данные возвращаются из parseserver, код внутри блока запроса начнет выполняться. Это позволяет распечатывать данные в массиве после его заполнения. Если вы пытаетесь сделать что-то еще с этим кодом, кроме печати, вам понадобится больше кода. Я предлагаю создать метод вне viewDidLoad, а затем выполнить некоторую логику, которая заставляет цикл for вызывать функцию, когда она достигает конца цикла.