Определение порядка вывода в Swift‑программе

В показанном фрагменте выводится только 7: функция showNumbers объявлена, но нигде не вызвана.

Короткий ответ

Что ответить на собеседовании

В показанном фрагменте выводится только 7: функция showNumbers объявлена, но нигде не вызвана.

Подробный разбор

Ответ с пояснениями

Условие

Рассмотрите следующий фрагмент кода на Swift, в котором используются DispatchQueue для асинхронного и синхронного выполнения задач в главной очереди. Какой порядок чисел будет напечатан в консоль?

func showNumbers() {
    print(1)
    DispatchQueue.main.async {
        print(2)
        DispatchQueue.main.async {
            print(3)
            DispatchQueue.main.sync {
                print(4)
            }
        }
        print(5)
    }
    print(6)
}
print(7)

Ответ

В показанном фрагменте выводится только 7: функция showNumbers объявлена, но нигде не вызвана.

Тело функции не выполняется при её объявлении. Поэтому анализ вложенных очередей не влияет на фактический результат этого кода. Если дополнительно вызвать showNumbers на main thread, появится цепочка печати с последующим main.sync из main queue и deadlock/диагностикой libdispatch; это уже изменённая программа. В задачах на вывод сначала проверяйте, какие функции действительно вызываются, и только затем порядок их асинхронных блоков.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее