带有可选依赖项的 Swift 包?

Rad*_*own 6 ios swift swift-package-manager

我很好奇如何设置以下内容:

  • 创建具有一些基本功能的核心 Swift 包。
  • 有其他与核心包相吻合的可选包(直接相关)。可能有 10 多个功能块。

因此,在 swift 包中,您可以在依赖项中进行硬编码。我不想要这样。为了将应用程序的大小保持在最小并允许开发人员根据需要选择功能代码块,开发人员是否可以包含核心包,然后包含他们需要的具有特定功能的其他包 - 这些包在某种程度上依赖于核心包?

您是否只添加核心 swift 包,然后添加每个功能块 swift 包?

我想知道如何设置才能为开发人员提供灵活性 - 将核心功能块分开,以便根据需要将它们拉入项目中。让事情尽可能简单。

Ber*_*rik 0

分层架构中,通常不需要可选的依赖关系。在更混乱的依赖关系图中,拥有可选的依赖关系确实非常有用。

如何在 Swift 包中实现可选依赖项?

答:只需不要在 Package.swift 文件中添加依赖项即可。

要使用 Core 包(我们称之为MyCorePackage),代码需要检查是否可以导入该包,如下所示:

#if canImport(MyCorePackage)

import MyCorePackage

#endif

struct MyRelatedType { ... }

#if canImport(MyCorePackage)

extension MyRelatedType {
  var asCoreType: CoreType { ... }
}

#endif
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案可能有效,但并非总是有效。如果 MyCorePackage 框架是在这个包之后加载的,那么它将无法工作。根据我的经验,设置链接的二进制顺序是不可靠的 (2认同)