在Swift框架中公开依赖类

eye*_*llz 10 ios cocoapods swift

我建立了两个框架的迅速,让我们给他们打电话CoreFrameworkMyFramework

MyFramework在其公共方法中依赖CoreFramework并使用某些CoreFramework类,结构和枚举,例如:

public func fetchData() -> CoreStruct
Run Code Online (Sandbox Code Playgroud)

我为两个框架设置了podspec,我可以MyFramework在我的项目中用作pod.在我的项目中,我会写一些类似于:

let result = fetchData()
Run Code Online (Sandbox Code Playgroud)

这个编译和Xcode甚至在我点击变量时给我正确的类型,但如果我想明确指定result类似的类型:

let result: CoreStruct = fetchData()
Run Code Online (Sandbox Code Playgroud)

我收到编译错误,我必须导入 CoreFramework

我需要做什么,能够明确地使用像CoreStruct我的项目中的东西,而不必导入底层框架?

Pau*_*ell 5

Swift 中没有办法让导入一个模块自动导入另一个模块。这是语言设计者\xe2\x80\x99 部分的有意识的选择,Swift 对此非常严格。

\n\n

有一种叫做 \xe2\x80\x9cumbrella 框架\xe2\x80\x9d 的东西,它可以通过让你为多个子框架创建一个外观来实现你想要的功能,但苹果特别不鼓励你创建一个.

\n\n

除此之外,您必须确保(在您的示例中)fetchData()CoreStruct被编译到相同的框架中,您可以通过以下方式做到这一点:

\n\n
    \n
  • 将\xe2\x80\x99s 代码MyFramework包含CoreFramework为 git 子模块,
  • \n
  • 使用Cocoapods在同一个工作区中MyFramework构建(即作为 pod 发布,并将其包含在 podfile 中而不带选项,这样您就可以将一个工作区中的两个项目编译成一个框架),CoreFrameworkCoreFrameworkMyFramework use_frameworks
  • \n
  • 合并项目(即只需将所有源文件添加到MyFramework同一CoreFramework项目),
  • \n
\n\n

\xe2\x80\xa6 或其他任何导致两个源代码树被编译到一个框架中的内容。

\n