【问题标题】:Swift: export API of dependencySwift:依赖的导出 API
【发布时间】:2016-11-14 16:54:08
【问题描述】:

假设我们有 2 个用 Swift 编写的框架:A.frameworkB.frameworkA 依赖于 B。我希望每个依赖于A 的项目都能够访问框架B 的api,而不必在项目源文件中访问import B。如何实现?

编辑:我特别感兴趣的是如何通过 Cocoapods 来完成。

另一个编辑:我认为如果我解释这个问题出现的背景会很有帮助,因为尽管它的持续时间和赏金,我仍然没有得到合适的答案。

所以,我有 pod Freestyler (https://github.com/cayugasoft/Freestyler),它本身依赖于 pod FreestylerCore (https://github.com/cayugasoft/FreestylerCore)。工作正常,但即使import Freestyler 完成,我也必须在项目中使用import FreestylerCore。它看起来对我来说有点烦人,因为我认为这个依赖(Freestyler -> FreestylerCore)是实现细节,我希望库的用户自动让这个东西工作而不导入除主 pod 之外的任何其他东西,Freestyler。所以,这就是我问这个问题的原因。有什么方法可以实现吗?

【问题讨论】:

  • 如果有错误请纠正我,因为 A 依赖于 B 并且在 A 的源文件中导入了 B。现在您想拥有一个项目 P 而不必在 P 源文件中导入 B 吗?是对的吗 ?如果是这种情况,您最终希望将 B 添加为 A 的依赖项并仅添加 A 作为 P 的依赖项?
  • @PenkeySuresh:我基本上想要 Objective-C 中的伞形标题之类的东西。您导入此标头,所有其他标头都会自动导入,您不必手动导入它们。我想知道是否有实现类似行为的机制,但在 Swift 中。
  • 我想你要找的是@_exported
  • @HAS:是的,它有效!请回答,我会接受的。我决定不在我上面提到的项目中使用它,因为: 1. 它是一种私有的、未记录的属性,可以随时删除; 2. 看起来它不适用于自定义运算符(我总是收到错误 Operator is not a known binary operator)。但无论如何,很高兴知道这样的事情存在。

标签: swift cocoapods


【解决方案1】:

事实证明,在 Swift 中,这是默认行为。

如果 Pod.A 依赖于 Pod.B,那么依赖于 Pod.A 的项目(通过在 Podfile 中包含 Pod.A)确实对 Pod.B 具有可见性。

要查看如何设置具有依赖项的 Pod.A 的示例,然后查看使用 Pod.A(并且还具有对 Pod.B 的可见性)的示例项目,请参阅我的 Public GitHub Repo 演示:

https://github.com/ericwastaken/CocoaPod-Dependency-Demo

我将 cmets 添加到示例应用程序 (ViewController) 以显示此工作。回购有额外的解释。

【讨论】:

  • 感谢您的回答,@ericWasTaken。不幸的是,这不是我的意思。很明显可以在依赖pod A的项目中使用pod B,如果你导入pod B,但是我问如何实现这个不导入pod B,只导入pod A我>。我查看了您的 github 示例 - 如果 ViewController 中的行 import StackO_Dependency_Demo 被注释掉,代码将无法编译。
  • 我的示例应用从未在 Podfile 中引用 Pod.B。 Pod.B 是 React 吊舱!我的示例仅引用 Pod.A,它会自动让您访问通过 Pod.A(StackO pod = Pod.A)提供的 Pod.B(react pod)。当然,如果您删除 Pod.A,它将无法构建。这是视图控制器中使用的主要 Pod。无论如何,也许您正在寻找 Pod.B 逻辑的静态包含。您当然可以将这些类带入您的 Pod.A 并作为单个 Pod 一起编译。但这不是 CocoaPod 最终的工作方式,也不是它的用途。
  • 是的,现在看看你的问题,如果你根本不需要导入语句,那么你需要在你的 Pod.A 中包含 Pod.B 逻辑代码/类。也许你可以 fork Pod.B,然后添加你自己的逻辑。至少通过这种方式,您将来可能能够将更改合并到您的 fork 中。
猜你喜欢
  • 2016-01-08
  • 2020-09-03
  • 2010-09-06
  • 1970-01-01
  • 2014-07-26
  • 2013-11-25
  • 2013-11-21
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多