Swift - статически настроенный язык программирования. Это приводит к тому, что Swift максимально использует адреса памяти, когда требуется вызвать функцию. Побочным эффектом является невозможность захвата имени вызываемой функции, поскольку в большинстве случаев это будет простой адрес памяти.
#function
работает, потому что эта конструкция заменяется в время компиляции функцией вызова (это не конструкция времени выполнения).
Если у вас есть доступные символы отладки, вы можете восстановить имя функции по двоичному адресу, однако для этого потребуется доступ к инфраструктуре dSYM из вашего приложения, что маловероятно, что вы захотите сделать, так как вы отправляете app вместе с символами отладки - это приглашение для хакеров провести обратный инжиниринг в вашем приложении.
Динамически отправляемые языки, такие как Objective-C, сохраняют ссылку на вызываемую функцию (селектор), но только в том случае, если вызываемая функция является методом (то есть функцией-членом). Другие языки, такие как Ruby, JavaScript, являются интерпретируемыми языками, что делает имя функции доступным в любое время.