-1

在我的 objc 项目中,我需要使用 swift pod。为此,我需要在 swift pod 类中添加 @objc,然后才能在目标 c 类中使用委托和其他属性。我的问题是:有没有什么方法可以在没有在 swift pod 类中手动添加 @objc 的情况下将 swift pod 用于目标 c 项目?提前致谢!

4

1 回答 1

0

要回答您的问题:不,您需要添加@objc 某处,这是可以从 Objective-C 调用 Swift 方法的唯一方法。

由于需要一个 Swift 方法可用于您的 ObjC 代码的地方,您基本上有两个选择:

a) 根据您对该 pod 的使用范围,您可以在 pod 周围编写一个小型 Swift 包装器,在其中进行必要的调用并通过 @objc 公开您的包装器方法。

b) 或者,我建议分叉 pod,对互操作性进行更改,并在 PR 中提供您的更改。

为了说明 a),假设您的 pod 有这个:

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];
}
于 2020-05-12T11:31:50.683 回答