我已经在swift中构建了两个框架,让我们称之为CoreFramework
和MyFramework
MyFramework
依赖CoreFramework
并在其公共方法中使用CoreFramework
的一些类,结构和枚举,例如:
public func fetchData() -> CoreStruct
我已经为两个Frameworks设置了podspec,我可以在项目中使用MyFramework
作为pod。在我的项目中,我会写一些类似的东西:
let result = fetchData()
这个编译和Xcode甚至在我点击变量时给我正确的类型,但是如果我想明确指定result
的类型:
let result: CoreStruct = fetchData()
我收到编译错误,我必须导入CoreFramework
我需要做什么才能在项目中明确使用CoreStruct
之类的内容,而无需导入底层框架?
答案 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
选项,以便在一个工作空间中将两个项目编译到一个框架中),MyFramework
和CoreFramework
中的所有源文件添加到同一个项目中),...或导致两个源树编译成一个框架的任何其他内容。
答案 1 :(得分:0)
您可以在CoreFramework
的基础MyFramework
中公开所需的类
public typealias CoreStruct = CoreFramework.CoreStruct
答案 2 :(得分:-1)
你可以做到
import struct CoreFramework.CoreStruct
仅导入此特定类型,请参阅The Swift Programming Language Reference: Import Declarations。