Я пишу iOS-приложение на Swift и пытаюсь понять, как организовать проект в отдельные модули. Я использую архитектуру MVVM и хочу сделать компоненты Model, ViewModel и View отдельными модулями Swift, которые делают только свои подмножества доступными для модулей, которые их импортируют. Файлы в представлении будут импортировать ViewModel, а файлы в ViewModel будут импортировать модель. Как я могу это сделать? Обратите внимание, что я не пытаюсь создавать библиотеки, которыми могут пользоваться несколько приложений. Я просто пытаюсь обеспечить разделение компонентов с помощью модулей.
РЕДАКТИРОВАТЬ: Может быть, вопрос в том, «Какой механизм я должен использовать для создания модулей, кроме того, который поставляется с первоначальным проектом приложения iOS?»
Один из ответов в разделе «Как вы используете пространства имен в Swift?» https://stackoverflow.com/a/24032860/215400 говорит: "классы (и т. д.) неявно определяются модулем (цель Xcode), в которой они находятся». Из этого можно сделать вывод, что цели соответствуют модулям и что ответ заключается в создании отдельных целей в рамках проекта Xcode, но я пробовал это раньше, и tskulbru говорит, что мне нужно несколько проектов Xcode.
Что касается нескольких проектов Xcode, параметр «Файл»> «Создать»> «Проект»> «iOS Framework & Library»> «Cocoa Touch Framework» выглядит неправильно, потому что он предназначен для вещей, использующих UIKit, и два модуля, которые я хочу создать, не должны зависеть на УИКит. Другая опция «Структура и библиотека», статическая библиотека Cocoa Touch, не подходит для Swift.
В другом сообщении StackOverflow упоминается использование частных модулей. Поработав над этим час, я пришел к выводу, что это неправильное решение, потому что мне не нужно редактировать эти модули в разных рабочих пространствах.
private
для принудительной инкапсуляции? - person Marc Khadpe   schedule 01.01.2016….framework
— она может зависеть от UIKit, AppKit, Foundation, CoreFoundation или любых других фреймворков или даже не иметь зависимостей (зависит только от std/system). C API). Чтобы это не зависело от UIKit, зайдите в настройки проекта и заменитеUIKit.framework
в Linked Frameworks наFoundation.framework
. - person Slipp D. Thompson   schedule 13.02.2017