如何在 Objective-C 中导入 Swift 协议

Joh*_*Doe 2 objective-c swift

在我的快速课程中,我有下一个协议:

@objc
public protocol MyDelegate: AnyObject { ... }
Run Code Online (Sandbox Code Playgroud)

我需要从头文件而不是.m文件访问该协议。我怎样才能做到这一点?

我在 SO 中发现了一些案例,我尝试了它们

#import <ModuleName/ModuleName-Swift.h>
Run Code Online (Sandbox Code Playgroud)

@import MySwiftClass;

但我仍然无法在 Obj-C 的文件中使用该协议.h。我怎样才能解决这个问题?

mag*_*zbc 5

从文件中生成的标头引用 Swift 类或协议.h将创建循环引用,因此这是不可能的。Apple 建议使用前向声明并在.m文件中进行实际导入。

来源

当 Objective-C 头文件中的声明引用来自同一目标的 Swift 类或协议时,导入生成的头会创建循环引用。为了避免这种情况,请使用 Swift 类或协议的前向声明在 Objective-C 接口中引用它。

换句话说,你想要的(至少目前)是不可能的。

  • 有可能,您只需要使用“@protocol MyDelegate”在“.h”文件中转发声明协议即可。 (2认同)