在 Objective-C 项目中找不到 Swift 类

6

我正在开发一个使用Objective-C的iOS项目。我需要将一些Swift文件集成到其中。所以,我进行了以下操作:

  1. 添加了一个名为“temp”的新Swift文件,因此我的Xcode IDE(版本9.1)会添加MyProject-Bridging-Header.h
  2. 将要使用的Swift文件添加到了项目中。
  3. 将目标设置的Defines Module更改为YES。
  4. 同样地,将Product Module Name设置为“MyProject”。
  5. 我可以看到MyProject-swift.h是“Objective-C Generated Interface Header Name”设置的文件名。
  6. 在我的Objective-C .m文件中为MyProject-swift.h添加了导入语句,并且能够成功构建项目。
  7. 我检查Finder发现创建了MyProject-swift.h
  8. 确保Swift类声明中有@obj前缀。

然而,当我尝试使用任何Swift类时,就会出现编译时错误“User of undeclared identifier”。

这个问题的原因是什么? 我有什么遗漏吗?

[更新 Xcode 14] 默认情况下,PRODUCT_MODULE_NAME 设置为 XXX-Swift.h,其中 Swift 的 S 是大写。

2个回答

7

问题解决了...

我在Objective-C类中缺少了Swift类的前向声明。我只需要在.h文件的接口声明之前添加以下语句即可:

@class MySwiftClassName;

一旦添加了该语句,构建就可以成功。


0

[Xcode 14 更新]

让 Swift 类暴露给 Objective-C 的方法:

步骤:

  1. NSObject 继承类。
  2. 直接给 Swift 类加上属性 @objcMembers 或者有选择性地给预期的类成员加上 @objc 属性。
  3. 在你想要使用 Swift 类的 ObjC 类的头文件中添加 Swift 类声明,例如: @class SwiftClassXXX;
  4. 相应地,在你想要使用 Swift 类的 ObjC 类的 .m 文件中,#import 一个将由编译器自动生成的头文件。如果你的项目名为 MyProject,那么自动生成的头文件将会是 MyProject-Swift.h(注意 S 是大写的)。
  5. 在你的 .m 中使用你的 Swift 类。

你可以通过检查构建设置中的 PRODUCT_MODULE_NAME 并更改它来更改或检查 MyProject-Swift.h 自动头文件的名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接