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