В чем разница между пакетом 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.