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

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

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

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


person William Entriken    schedule 14.09.2016    source источник


Ответы (2)


Как указано в Swift.org.

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

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

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

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

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

person Santosh    schedule 14.09.2016

Пакет 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/пример-пакет-fisheryates/tree/master/Sources.

person Daniel Dunbar    schedule 14.09.2016
comment
Спасибо, эта аналогия очень полезна - person William Entriken; 16.09.2016
comment
Является ли модуль .framework или папкой, состоящей из файлов .swift? - person Sentry.co; 04.02.2017
comment
Цели обоих не были описаны в этом ответе. - person Sazzad Hissain Khan; 18.12.2019