如何在 objective c 项目中使用 swift pod 而无需在 pod 类 中手动编写 @objc?

how to use a swift pod in objective c project without manually writing @objc in pod classes?

在我的 objc 项目中,我需要使用一个 swift pod。为此,我需要在 swift pod 类 中添加 @objc,然后我才能在 objective c 类 中使用委托和其他属性。 我的问题是:有什么方法可以将 swift pod 用于 objective c 项目而无需在 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];
}