Comments 10
Забыли указать минимальную версию iOS 16, прежде чем красиво расписывать архитектурное чудо. Много у нас приложений в продакшене для iOS 16+?
Но мы просто не можем рассказать про все аспекты архитектуры в одной статье, поэтому вместе с демо-проектом вы сможете посмотреть DocC туториалы и документацию.
Почему у вас в туториалах используется enum без case? Он же тогда работает как обычная структура
Если речь про `enum Facade` и его вложенные enum
это устоявшаяся практика для группировки статических переменных и функций.
Этот подход применяется например в SwiftGen для доступа к ресурсам.
В отличие от структуры enum не содержит дефолтного инициализатора и других лишних функций, которые могут привести к нецелевому использованию сущности.
Вложенные enum позволяют формировать хорошо читаемые пути до функций: Facade.Storages.User.current, что удобнее просто длинного имени. Автодополнение в IDE быстрее подбирает нужный вариант такого пути.
Да, дефолтного инициализатора не будет, но вы все внутри оъявляете статическими функциями и статическими полями - вы и не будете его использовать.
И структуры точно так же можно делать вложенными и писать «Facade.Storages.User.current». Собственно отсюда и вопрос, почему именно enum
вы и не будете его использовать.
Не будем, но это остается потенциально возможно. У enum без cases не будет инициализатора даже на internal уровне, что на 100% исключит вероятность его использования.
В первую очередь вдохновлялись опытом других.
Например, SwiftGen уже упоминал, но даже Apple в Combine тоже предпочли enum - Subscriptions, Publishers
Я бы добавил в список сравнения что-нибудь из UDF, так как для SwiftUI они гораздо популярнее MVC и MVP.
Интересно узнать, а Clean Architecture применима к Swift? Если да, то почему вы предпочли ей свою вариацию архитектуры. Привет от Flutter-разработчика! :)
Архитектура для SwiftUI — VSURF