Xcode - 从嵌套框架访问 swift 类

Posted

技术标签:

【中文标题】Xcode - 从嵌套框架访问 swift 类【英文标题】:Xcode - Accessing swift class from nested framework 【发布时间】:2021-02-05 09:33:42 【问题描述】:

我有一个带有嵌套框架的 Xcode 项目。 嵌套框架包含一个我想使用的 Swift 类,它使用 @objcMembers public class

@objcMembers public class SPDetailedStringPicker : UIViewController 


我想在我的基础项目中使用这个 Swift 类。 我尝试了许多导入方法,例如使用:

#import "MyNestedFramework/MyNestedFramework-Swift.h"

也试过了:

#import "MyNestedFramework-Swift.h"

但没有运气。 项目结构如下:

- MyProject
  - MyNestedFramework.xcodeproj
    - Classes
      - The Swift class I want to use
  - MyProject
    - Classes
      - The Objective c class I want to use that swift class in

【问题讨论】:

您需要为此使用open 访问权限,请参阅docs.swift.org/swift-book/LanguageGuide/AccessControl.html 尝试将 public 替换为 open 仍然无法访问课程 【参考方案1】:

使用<> 而不是"

#import <MyNestedFramework/MyNestedFramework-Swift.h>

【讨论】:

也试过这个,我得到'MyNestedFramework/MyNestedFramework-Swift.h'文件没有找到 您是否将您的框架链接到您的目标? 是的,我的目标可以访问框架内的所有其他内容,只是不能访问 swift 类 您也可以打开生成的 MyNestedFramework.framework 文件,并检查名为“Headers”的文件夹是否存在 -Swift.h 修复了!感谢您的帮助@arturdev - 我发现存在 -swift 文件后发现这是一个标题问题,打开 Build Phases -> Headers,并将我的 .framework 文件添加到项目中。现在我可以按照您的回答进行导入,并且代码完成会显示在框架中的其余文件中。【参考方案2】:

感谢 @arturdev 的建议 - 我设法解决了这个问题。 建议在以下位置检查编译的框架头文件:

- MyProject
  - MyNestedFramework
    - Products
      - MyNestedFramework.framework

正在生成MyNestedFramework-Swift.h 头文件。然后我打开MyNestedFramework 下的构建阶段选项卡并打开Headers 部分,然后将实际的MyNestedFramework.Framework 添加到项目中。

我现在可以通过导入在我的基础项目中使用来自 MyNestedFramework 的 Swift 文件:

#import <MyNestedFramework/MyNestedFramework-Swift.h>

【讨论】:

以上是关于Xcode - 从嵌套框架访问 swift 类的主要内容,如果未能解决你的问题,请参考以下文章

Xcode Swift:使用使用 pod (CocoaPods) 的框架时出错

如何在同一框架内访问 Objective-C 中的内部 Swift 类?

当Apple从设置中删除时,如何在Xcode 9 Simulator中访问Twitter?

Xcode 7 和基于 swift 的框架

ionic cordova build ios 使用 xcode swift 3 框架安装自定义插件失败

将 Swift 框架嵌入到另一个框架 Xcode