如何在Objective-C中导入Swift协议
在我的swift课程中,我有下一个协议:如何在Objective-C中导入Swift协议,swift,objective-c,Swift,Objective C,在我的swift课程中,我有下一个协议: @objc public protocol MyDelegate: AnyObject { ... } 我需要从头文件而不是.m文件访问该协议。 我该怎么做 我在SO中发现了一些案例,并尝试将它们作为 #import <ModuleName/ModuleName-Swift.h> #导入 及 @import myswitclass 但我仍然无法在Obj-C中的.h文件中使用该协议。 如何解决此问题?从.h文件中生成的头引用Swift类或
@objc
public protocol MyDelegate: AnyObject { ... }
我需要从头文件而不是.m
文件访问该协议。
我该怎么做
我在SO中发现了一些案例,并尝试将它们作为
#import <ModuleName/ModuleName-Swift.h>
#导入
及
@import myswitclass代码>
但我仍然无法在Obj-C中的.h
文件中使用该协议。
如何解决此问题?从.h
文件中生成的头引用Swift类或协议将创建循环引用,因此不可能。苹果建议使用转发声明并在.m
文件中进行实际导入
当Objective-C头文件中的声明引用来自同一目标的Swift类或协议时,导入生成的头文件将创建循环引用。为了避免这种情况,请使用Swift类或协议的转发声明在Objective-C接口中引用它
换句话说,您想要的(至少目前)是不可能的。从.h
文件中生成的头引用Swift类或协议将创建循环引用,因此不可能。苹果建议使用转发声明并在.m
文件中进行实际导入
当Objective-C头文件中的声明引用来自同一目标的Swift类或协议时,导入生成的头文件将创建循环引用。为了避免这种情况,请使用Swift类或协议的转发声明在Objective-C接口中引用它
换句话说,您想要的是(至少目前是)不可能的。是可能的,您只需要在.h
文件中使用@protocol MyDelegate
@DávidPásztor yes,同意,这是可能的。但通过远期声明可以避免周期性引用。就像您可以使用@class
一样。swift协议需要依赖于对象。就我记忆所及,任何物体都是如此。然后您仍然使用#import
,但如果可以,您只需要在.h
文件中使用@protocol MyDelegate
@DávidPásztor yes,同意,这是可能的,在.h
文件中向前声明协议。但通过远期声明可以避免周期性引用。就像您可以使用@class
一样。swift协议需要依赖于对象。就我记忆所及,任何物体都是如此。然后仍然使用#导入
,但要导入到.m
文件中