Non-escaping гарантированно вызывается до выхода из функции; escaping может «уйти» наружу — в свойство, очередь, будущий вызов.
Разбор
- По умолчанию параметры closure — non-escaping.
- Escaping требует явного
@escaping.
- В non-escaping можно мутировать captured var проще с точки зрения компилятора.
- Ошибка «escaping closure captures non-escaping» — сигнал о lifetime.
Итог
Различие — про время жизни колбэка и правила захвата.