如何在objectivec项目中使用swiftpod,而不在pod类中手动编写@objc



在我的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];
}

最新更新