Swift包和模块之间有什么区别?

问题描述:

Swift具有模块化代码,可以将它们分类为模块。Swift包和模块之间有什么区别?

但是你可以使用Swift Package Manager来获取和安装模块。

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

Swift.org

模块提到:夫特组织码成模块。每个模块都指定一个名称空间并强制执行访问控制,该代码的部分代码可以在模块外部使用。

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

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

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

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

Swift包是一个源代码的集合...你可以把它看作一个自包含的项目,它有自己的版本和存储库。 Swift语言本身并不了解当前的包,它只是由Swift包管理器使用的概念。

迅速包可以包含一个或多个模块夫特 - 每个夫特模块东西语言知道,并且迅捷模块定义的之类的东西,例如访问控制(publicinternalprivate)的范围。一个Swift包也可以包含其他类型的目标或模块,例如它可以包含一个C源代码体构建到一个库中。

Swift包在某种意义上类似于Xcode项目,而Swift模块类似于Xcode目标。

作为具体的例子https://github.com/apple/example-package-fisheryates夫特包(如在顶层标志着由Package.swift),由它的URL识别,它包含有两个源的单一夫特模块: https://github.com/apple/example-package-fisheryates/tree/master/Sources

+2

谢谢,这个比喻非常有帮助 –

+0

模块是一个.framework还是一个由.swift文件组成的文件夹? – eonist