Вложенные протоколы: неймспейсы без префиксов 🚀
🔥 SE-0404 (Swift 5.10) разрешает объявлять протоколы внутри типов: Bank.Transaction вместо BankTransaction, и домен читается прямо из имени. Вкладывать можно в структуру, класс, энум, актор — и, что менее известно, в необобщённые функции и замыкания, при условии что все конформансы живут в той же функции.
⛔️ Чего нельзя: обобщённый контекст. Ошибка звучит как «protocol 'X' cannot be nested within a generic context», и это касается не только обобщённых типов и функций, но и необобщённой функции внутри обобщённого типа. Вкладывать протокол в протокол тоже нельзя — это отдельное Future Direction.
⚠️ Две вещи для тех, кто пишет библиотеки. Вложенный протокол не витнессит требование associatedtype. И родительский контекст входит в манглинг имени, поэтому перенос протокола внутрь или наружу ломает ABI (исходную совместимость можно прикрыть typealias).
#Swift #APIDesign #SwiftProgramming #iOSDevelopment #CleanCode