在我的objc项目中,我需要使用swift pod。为此,我需要在swift pod类中添加@objc,这样我才能在objective c类中使用委托和其他属性。我的问题是:有没有任何方法可以在目标c项目中使用swift pod,而无需在swift pod类中手动添加@objc?提前感谢!
要回答您的问题:不,您需要在的某个地方添加@objc
,这是Swift方法可以从Objective-C调用的唯一方法。
由于需要一个Swift方法可用于ObjC代码的地方,因此基本上有两个选项:
a( 根据你对该pod的使用范围,你可以在pod周围编写一个小的Swift包装器,在那里你可以进行必要的调用,并通过@objc公开你的包装器方法。
b( 或者,我建议分叉pod,为互操作性进行更改,并在PR中向上游提供更改。
为了说明a(,假设你的吊舱有这样的:
class PodClass {
func podMethod() -> Int {
// ...
return 42
}
}
为了将其提供给Objective-C,您可以实现
class PodWrapper: NSObject {
private let podc = PodClass()
@objc func podMethod() -> Int {
return podc.podMethod()
}
}
然后在Objective-C中进行
#import "YOURAPPNAME-Swift.h"
-(void) foo {
PodWrapper* p = [PodWrapper new];
NSInteger x = [p podMethod];
}