В показанном фрагменте выводится только 7: функция showNumbers объявлена, но нигде не вызвана.
Определение порядка вывода в Swift‑программе
В показанном фрагменте выводится только 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; это уже изменённая программа. В задачах на вывод сначала проверяйте, какие функции действительно вызываются, и только затем порядок их асинхронных блоков.