Swift-макросы: кодогенерация, которую можно прочитать 🎰
🧵 Макросы (Swift 5.9) разворачиваются в обычный Swift на этапе компиляции: типобезопасно, отлаживаемо, и результат можно посмотреть глазами. Два вида. Freestanding — самостоятельное выражение или объявление, пишется с # (#stringify, #warning). Attached— навешивается на объявление и пишется с @. Кстати, @Observable — это тоже макрос, а не что-то встроенное в компилятор.
💡 Практический совет: правый клик → Expand Macro в Xcode показывает, во что именно всё развернулось. Начинать стоит со встроенных, а не сразу писать свои.
⚠️ И поправка, которая гуляет по статьям: #assert(age >= 0, "Invalid age") — не макрос Swift. Токен #assert в компиляторе действительно есть, но это законсервированный экспериментальный compile-time static assert за флагом -enable-experimental-static-assert, и рантайм-значение вроде age он принять не может. Для обычных проверок — assert или precondition.
#Swift #SwiftMacros #iOSDevelopment #CleanCode #AdvancedSwift