gpt4 book ai didi

ios - 在 Swift 框架中公开依赖类

转载 作者:IT王子 更新时间:2023-10-29 05:44:38 25 4
gpt4 key购买 nike

我在swift中构建了两个框架,我们称它们为CoreFrameworkMyFramework

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

public func fetchData() -> CoreStruct

我已经为两个框架设置了一个 podspec,我可以在我的项目中使用 MyFramework 作为一个 pod。在我的项目中,我会这样写:

let result = fetchData()

当我 alt+click 变量时,这会编译并且 Xcode 甚至会给我正确的类型,但是如果我想像这样显式指定 result 的类型:

let result: CoreStruct = fetchData()

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

我必须做什么才能在我的项目中显式使用 CoreStruct 之类的东西,而不必导入底层框架?

最佳答案

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

有一种叫做“伞形框架”的东西,它有点通过让你为几个子框架创建一个外观来做你想做的事,但 Apple specifically discourages you from creating one .

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

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

...或任何其他导致两个源代码树被编译到一个框架中的东西。

关于ios - 在 Swift 框架中公开依赖类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33255627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com