当我想在目标 c 项目中使用 swift 文件时使用未声明的标识符

Posted

技术标签:

【中文标题】当我想在目标 c 项目中使用 swift 文件时使用未声明的标识符【英文标题】:Use of undeclared identifier when I want use swift file in objective c project 【发布时间】:2018-02-10 13:34:02 【问题描述】:

当我想在目标 c 项目中使用 swift 文件并从 swift 类中声明一个对象时,我收到“使用未声明的标识符”错误。 我经过的方式:

    在项目中处理 swift 文件并在声明 swift 类之前键入 @objc

    在项目中手动创建头文件

    将目标中的“Defines module”设置为Yes

    target 中的 objective-C 桥接头 设置为 $(SRCROOT)/$(PRODUCT_MODULE_NAME)-Bridging-Header.h

    在objective-c文件中声明#import "productModuleName-Bridging-Header.h"

    使用 name_of_swift_class *s = [[name_of_swift_class alloc] init];

当我想在第 6 步中使用 swift 文件时,我收到“使用未声明的标识符”错误。为什么?!!!是我搞错了吗?

当我在新项目中测试此步骤时,我没有收到错误,但在我希望它返回错误的项目中。

感谢您的帮助

【问题讨论】:

在#ifdef FB_SONARKIT_ENABLED 或#if DEBUG 中放置“MyProject-Swift.h”时,您也可能会收到此错误 - 然后它在模拟器中有效,但在构建版本时无效.. 【参考方案1】:

问题出在第 5 步 您不应该导入 "productModuleName-Bridging-Header.h",而应该导入 "productModuleName-Swift。 h"

P.S- 进行此更改后清理您的项目,清除您的派生数据并构建它。它会起作用的。希望对你有帮助:)

【讨论】:

以上是关于当我想在目标 c 项目中使用 swift 文件时使用未声明的标识符的主要内容,如果未能解决你的问题,请参考以下文章

如何在目标 c-swift 桥接项目中使用 intentdefinition 文件?

使用 fwrite 时使文件环绕

Swift - 如何在使用软件键盘时使 UITextField 可见? [复制]

对于使用 Swift 的目标,“Swift 语言版本”(SWIFT_VERSION)构建设置必须设置为受支持的值

将 Swift 类添加到具有多个目标的 Objective-C 项目

如何从目标 c 中的 pod 文件访问我的 swift 项目文件?