12

Swift 具有模块化代码,可以将其分类为模块。

但是您可以使用 Swift 包管理器来获取和安装模块。

“Swift 包”和“Swift 模块”之间有什么区别吗?我什么时候应该使用一个短语或另一个?

4

2 回答 2

26

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 。

于 2016-09-14T21:16:22.410 回答
3

Swift.org中所述

模块: Swift 将代码组织成模块。每个模块都指定一个命名空间,并对可以在模块外部使用的代码的哪些部分实施访问控制。

一个程序可能会将其所有代码放在一个模块中,或者它可能会导入其他模块作为依赖项。除了少数系统提供的模块,例如 macOS 上的 Darwin 或 Linux 上的 Glibc,大多数依赖项都需要下载和构建代码才能使用。

当您为解决特定问题的代码使用单独的模块时,该代码可以在其他情况下重用。例如,提供网络请求功能的模块可以在照片共享应用程序和天气应用程序之间共享。使用模块可以让您在其他开发人员的代码之上构建,而不是自己重新实现相同的功能。

包:一个包由 Swift 源文件和一个清单文件组成。名为 Package.swift 的清单文件使用 PackageDescription 模块定义包的名称及其内容。

一个包有一个或多个目标。每个目标指定一个产品,并且可以声明一个或多个依赖项。

于 2016-09-14T21:05:04.243 回答