В чем разница между пакетом Swift и модулем?

Swift имеет модульный код, который можно отсортировать по модулям.

Но вы можете использовать Swift Package Manager для загрузки и установки модулей.

Есть ли разница между "пакетом Swift" и "модулем Swift"? Когда я должен использовать одну фразу или другую?

2 ответа

Решение

Как уже упоминалось в Swift.org

Модули: Swift организует код в модули. Каждый модуль задает пространство имен и обеспечивает контроль доступа, в которых части этого кода могут использоваться за пределами модуля.

Программа может иметь весь свой код в одном модуле или импортировать другие модули как зависимости. Помимо нескольких системных модулей, таких как Darwin в macOS или Glibc в Linux, для большинства зависимостей требуется, чтобы код был загружен и собран для использования.

Когда вы используете отдельный модуль для кода, который решает конкретную проблему, этот код может быть повторно использован в других ситуациях. Например, модуль, который предоставляет функциональные возможности для выполнения сетевых запросов, может совместно использоваться приложением для обмена фотографиями и приложением погоды. Использование модулей позволяет вам строить поверх кода других разработчиков, а не реализовывать те же функции самостоятельно.

Пакеты: пакет состоит из исходных файлов Swift и файла манифеста. Файл манифеста, называемый Package.swift, определяет имя пакета и его содержимое с помощью модуля PackageDescription.

Пакет имеет одну или несколько целей. Каждая цель указывает продукт и может объявлять одну или несколько зависимостей.

Пакет Swift представляет собой набор исходного кода... вы можете думать о нем как о автономном проекте, который имеет свои собственные версии и репозиторий. Сам язык Swift в настоящее время не знает о пакетах, это концепция, используемая только менеджером пакетов Swift.

Пакет Swift может содержать один или несколько модулей Swift - каждый модуль Swift - это то, о чем знает язык, а модули Swift определяют объем таких вещей, как контроль доступа (public, internal, private) например. Пакет Swift может также содержать другие виды целей или модулей, например, он может содержать тело исходного кода на C для встраивания в библиотеку.

Пакеты Swift в некотором смысле аналогичны проектам Xcode, а модули Swift аналогичны целям Xcode.

В качестве конкретного примера https://github.com/apple/example-package-fisheryates представляет собой пакет Swift (как обозначено Package.swift на верхнем уровне), идентифицируется по URL-адресу и содержит один модуль Swift с двумя источниками: https://github.com/apple/example-package-fisheryates/tree/master/Sources.

Другие вопросы по тегам