Фон
У меня есть приложение SwiftUI, которое взаимодействует с API моего сервера, и я выделил весь клиентский код API в его собственную структуру.
Пытаясь иметь хорошую практику инкапсуляции, я сделал большую часть инициализаторов для типов моделей API internal
.
Например, тип User
имеет инициализатор internal
, чтобы он может быть создан только в результате вызова API, который выбирает пользователей (это очень простой пример, но есть и менее очевидные объекты).
Проблема:
Проблема в том, что многие из моих представлений SwiftUI либо принимают модальный тип API в качестве параметра, либо как @EnvironmentObject
. Это прекрасно работает, за исключением написания классов предварительного просмотра, поскольку я не могу инициализировать объекты этого типа.
Я вижу три решения:
- Сделайте инициализаторы
public
. При этом теряются преимущества инкапсуляции и безопасности, но его проще всего реализовать. - Сделайте каждый предварительный просмотр с помощью вызова API. Это дает преимущество сохранения инкапсуляции как есть, но требует большого количества кода, замедляет предварительный просмотр и делает предварительный просмотр зависимым от соединения inte rnet.
- Создайте файл в структуре API, который предоставляет пример объекта каждого типа. Хотя это вводит дополнительный код, он позволяет мне сохранять инкапсуляцию и иметь динамический c, быстрый предварительный просмотр.
Что было бы лучшим решением? Или есть способ предоставить доступ к предварительному просмотру для internal
типов, например, как друг работает на C ++?