Swift和Objective-C项目-生成的-Swift.h错误-无法找到UIViewController的接口声明

15
我有一个项目使用Swift生成的Bridging Header,并且已经正确设置了项目(名称没有空格,使用模块,在.mm文件中预先声明Swift类,删除派生数据,进行干净的重建等)。 Bridging Header已经生成了,但是自动生成的-Swift.h文件内有错误。更糟糕的是,这些错误出现在创建项目时生成的(Swift)版本的AppDelegate和ViewController上,而这些本来应该可以正常编译。-Swift.h中的错误有:
  • @interface AppDelegate : UIResponder <UIApplicationDelegate>
    >>找不到“UIResponder”的接口声明,它是“AppDelegate”的超类
    >>找不到“UIApplicationDelegate”的协议声明
  • @interface ViewController : UIViewController
    >>找不到“UIViewController”的接口声明,它是“ViewController”的超类

我在Stack Overflow和网络上搜索,找不到解决此特定问题的答案。是否还有其他人遇到过这个问题?或者,我能否将我的AppDelegate和ViewController类标记为Xcode不尝试为这些Swift类创建Objective-C桩,因为我实际上并不需要它们?

5个回答

19
只需添加。
#import <UIKit/UIKit.h>

之前

#import <YourProject-Swift.h>

在.mm文件中。对我很有帮助。


非常感谢!这是唯一对我有效的解决方案。 - tuttu47
你救了我的一天。+=1 - zioolek

7

我曾经遇到同样的问题并发现...

-Swift.h只能很好地与Objective-C一起使用,而不能与Objective-C++ (.mm) 一起使用。

因此,我使用了Objective-C类来连接Swift类。此外,您始终可以在Objective-C类中加载您的Objective-C++类。


我在使用CoreData时遇到了问题 :( - pojomx
对于CoreData,我使用Objective C来处理CoreData模型类。欢迎查看我在Github上的示例数据库应用程序。 SweeneyApps Github链接 - Paul Sweeney
在Xcode 13中,使用Objective-C++对我有效。 - Tamás Sengel

4

尝试将UIKit / UIKit.h导入到桥接标头文件中。


1
对我来说,在 Project-Swift.h 中导入 UIKit/UIKit.h 没有帮助,但在我的实际 Objective C 头文件中这样做就可以解决问题了。 - Krøllebølle
如果它不起作用,请尝试将UIKit / UIKit.h导入桥接头文件中。 - Thao Hoang
1
你不应该更改-Swift.h文件,因为它是自动生成的。一旦Xcode重新生成这个文件,该问题就会反弹回来。 - d4Rk

0

Swift不太擅长与Objective-C++一起使用。由于我需要与C++交互,所以我倾向于编写一个仅包含与C++接口的Objective-C++类MyClass_CPP,然后再编写一个Objective-C子类MyClass,可以很好地与Swift协作。


0
这是目前为止(2023年)的最新工作答案。
在我的情况下,这种情况以前发生过,当我在我的Objective-C项目中开发聊天功能时。
现在,我想在Swift中子类化AVPlayerViewController,并在我的Objective-C文件中使用该Swift子类。
修复这个问题的一种方法是创建一个Objective-C子类来继承任何iOS框架(例如AVKit)的模块类。然后将该Objective-C子类用作您的Swift子类的超类。

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