【问题标题】:Swift submodules - what are they exactly [closed]Swift 子模块 - 它们到底是什么 [关闭]
【发布时间】:2018-02-23 23:50:45
【问题描述】:

来自 Java 世界,我仍然无法准确理解 Swift 子模块是什么,什么不是 Java 包的对应物。

  • Swift 模块和子模块如何与 Java 中的 jar 和包相关联 世界?
  • 你真的可以从子模块导入吗,例如通过编写 import Module.Submodule1(...).SubmoduleN.MyClass?
  • 子模块是否绑定到目录树,就像 Java 包一样?如果不是,那么如何定义子模块,在哪里定义?

(我无法在 Apple 的 Swift 在线规范和他们分发的免费书籍中找到这些问题的答案。我在一些开发人员列表中询问过,但我得到的信息与 Apple 的不一致包管理器的文档,特别是关于第三点。)

【问题讨论】:

  • @Martijn Pieters - 我添加了一对单词。我大多不同意你的批评。这个问题基本上是在询问 Swift 模块系统如何(从概念上)映射到 Java 包/jar 模型中。模型之间的逻辑映射需要几个子问题来提出有用的、完整的理论。这不是我的观点,而是一个基本事实。我可以删除一些子问题,但我的查询将失去完整性。
  • 此外:正如您可以从(我作为 OP 接受的)答案中判断的那样,它不仅足够具体和一致,而且也不会“太宽泛”。我建议你更深入地重新思考你的批评者。

标签: swift module package


【解决方案1】:
  • Swift 模块 相当于Java 包Swift 框架 相当于Java jar。子模块只是其他模块中的模块。
  • 是的,你可以,但如果你只想导入一个类,你必须使用import classimport struct 用于结构,import enum 用于enum)。简单的import 只能与模块一起使用。
  • 不,它们没有绑定到文件夹树。它们是使用 Clang module system 定义的,Xcode 和 SPM 为您执行大部分样板文件。

【讨论】:

  • 好的,谢谢您的回答。为确保我已经很好地理解了您,请确认以下内容是否正确: 1 - 模块或子模块都未绑定到源文件夹树,因此我可以重构源文件夹而不会破坏客户的导入;和 2 - 子模块不是由源布局以任何方式隐含定义的,而是由附加工具和元文件定义的。这一切都正确吗?
  • Xcode 源文件可以在任何地方,如果文件在目标定义模块中,则文件属于模块。在 SPM 中它更严格一些,例如源必须在带有包描述的文件夹的子文件夹中,并且每个目标都在自己的文件夹中(尽管文件系统别名也可以)。所以:对于 Xcode 两者都是正确的,对于 SPM:不是真的。
  • 好的。非常感谢!
猜你喜欢
  • 2015-02-12
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 2013-07-02
相关资源
最近更新 更多