在自定义 Swift 框架中的 Objective-C 文件上使用 Swift

Posted

技术标签:

【中文标题】在自定义 Swift 框架中的 Objective-C 文件上使用 Swift【英文标题】:Using Swift on Objective-C file in custom Swift framework 【发布时间】:2018-07-17 03:57:55 【问题描述】:

我想使用 Swift 创建一个自定义框架。框架中有一些 Swift 文件,然后我创建一个名为 A(A.h 和 A.m)的新 Objective-C 文件。

在这个 Objective-C 文件中,我想使用另一个 Swift 类,所以我在 A.m 文件的顶部添加了以下导入语句

#import "<My framework target name>-Swift.h" 

在构建框架时,我收到错误提示“-Swift.h”未找到。

我尝试了一些解决方案,但仍然卡住了

我添加了一个桥接头文件,但由于自定义框架不允许桥接头而失败。 我在 Build Settings 上将“Defines Module”设为 YES,但似乎没用。

将 '$(CONFIGURATION_TEMP_DIR)/Product Name With Spaces.build/DerivedSources' 添加到标题搜索路径没有帮助。(关注此线程 ios - 'MyProject-Swift.h' file not found when running Unit Tests for Swift ,@gagarwal 的答案)

我也尝试将import语句移动到伞头,但出现同样的错误。

如何在 Objective-C 文件中使用 Swift 类?

【问题讨论】:

【参考方案1】:

#import 语句的格式是在应用程序目标的 Objective-C 文件中包含桥接头的方式。

在框架目标内的 Objective-C 文件中,要导入 Swift 接口,您的导入语句需要如下所示:

#import <FrameworkProductName/FrameworkProductModuleName-Swift.h>

另外,请记住,在框架目标中,除了必要的@objc 之外,您还必须创建希望从 Swift publicopen 访问的类和属性.

【讨论】:

以上是关于在自定义 Swift 框架中的 Objective-C 文件上使用 Swift的主要内容,如果未能解决你的问题,请参考以下文章

混合objective-c项目中的Swift“命名空间”不起作用

线程1:自定义框架Swift中Reachability框架中的signal SIGABRT

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

使用 Objective-C 框架构建 Swift 项目时出现“架构 arm64 的未定义符号”错误

Objective-C 框架中的 Swift 类别在运行时无法识别

无法调试嵌入在 Objective-C 应用程序中的 Swift 模块/框架