在Swift框架中公开依赖类

时间:2015-10-21 09:30:40

标签: ios swift cocoapods

我已经在swift中构建了两个框架,让我们称之为CoreFrameworkMyFramework

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

public func fetchData() -> CoreStruct

我已经为两个Frameworks设置了podspec,我可以在项目中使用MyFramework作为pod。在我的项目中,我会写一些类似的东西:

let result = fetchData()

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

let result: CoreStruct = fetchData()

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

我需要做什么才能在项目中明确使用CoreStruct之类的内容,而无需导入底层框架?

3 个答案:

答案 0 :(得分:3)

Swift无法导入一个模块自动导入另一个模块。这是语言设计者的一个有意识的选择,而Swift对此非常严格。

有一种称为“伞形框架”的东西,其中通过让你为几个子框架创建一个外观来实现你想要的东西,但Apple specifically discourages you from creating one

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

  • MyFramework包含CoreFramework代码作为git子模块,
  • MyFramework使用Cocoapods在同一工作区内构建CoreFramework(即将CoreFramework发布为pod,并将其包含在MyFramework 中,而不是 podfile中的use_frameworks选项,以便在一个工作空间中将两个项目编译到一个框架中),
  • 合并项目(即只将MyFrameworkCoreFramework中的所有源文件添加到同一个项目中),

...或导致两个源树编译成一个框架的任何其他内容。

答案 1 :(得分:0)

您可以在CoreFramework的基础MyFramework中公开所需的类

public typealias CoreStruct = CoreFramework.CoreStruct

答案 2 :(得分:-1)

你可以做到

import struct CoreFramework.CoreStruct

仅导入此特定类型,请参阅The Swift Programming Language Reference: Import Declarations