在 Swift 框架中公开 类 个依赖关系
Expose Classes of Dependencies in Swift Framework
我在swift中构建了两个框架,我们称它们为CoreFramework
和MyFramework
MyFramework
依赖于 CoreFramework
并在其 public 方法中使用了 CoreFramework
的一些 类、结构和枚举,如下所示例如:
public func fetchData() -> CoreStruct
我已经为两个框架设置了一个 podspec,我可以在我的项目中使用 MyFramework
作为一个 pod。在我的项目中,我会这样写:
let result = fetchData()
这编译并且 Xcode 甚至在我 alt+click 变量时给我正确的类型,但是如果我想像这样明确指定 result
的类型:
let result: CoreStruct = fetchData()
我遇到编译器错误,我必须导入 CoreFramework
我需要做什么才能在我的项目中显式使用 CoreStruct
之类的东西,而不必导入底层框架?
你可以
import struct CoreFramework.CoreStruct
要仅导入此特定类型,请参阅 The Swift Programming Language Reference: Import Declarations。
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
中的所有源文件添加到同一个项目),
...或任何其他导致将两个源代码树编译到一个框架中的东西。
您可以从 MyFramework
中的底层 CoreFramework
公开您需要的 类
public typealias CoreStruct = CoreFramework.CoreStruct
我在swift中构建了两个框架,我们称它们为CoreFramework
和MyFramework
MyFramework
依赖于 CoreFramework
并在其 public 方法中使用了 CoreFramework
的一些 类、结构和枚举,如下所示例如:
public func fetchData() -> CoreStruct
我已经为两个框架设置了一个 podspec,我可以在我的项目中使用 MyFramework
作为一个 pod。在我的项目中,我会这样写:
let result = fetchData()
这编译并且 Xcode 甚至在我 alt+click 变量时给我正确的类型,但是如果我想像这样明确指定 result
的类型:
let result: CoreStruct = fetchData()
我遇到编译器错误,我必须导入 CoreFramework
我需要做什么才能在我的项目中显式使用 CoreStruct
之类的东西,而不必导入底层框架?
你可以
import struct CoreFramework.CoreStruct
要仅导入此特定类型,请参阅 The Swift Programming Language Reference: Import Declarations。
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
中的所有源文件添加到同一个项目),
...或任何其他导致将两个源代码树编译到一个框架中的东西。
您可以从 MyFramework
CoreFramework
公开您需要的 类
public typealias CoreStruct = CoreFramework.CoreStruct