如何在一个pod库中混合使用Swift和Objective-C?

19

我使用命令pod lib create MixSwiftObjectiveC创建了一个新的Swift库。该命令可以在https://guides.cocoapods.org/making/using-pod-lib-create.html中找到。

在这个库中,我需要使用一些用Objective-C编写的代码。如果我有一个单独的“普通”项目,我会在头文件...-Bridging-Header.h中包含导入语句。但是,在库中是否有相应的等效方法?Swift和Objective-C是否可以在库中混合使用?

我创建了这个GitHub示例https://github.com/crarau/MixSwiftObjectiveC。为了运行示例,您需要XCode版本7.0 beta 6和Swift 2.0。

Compilation issue

感谢您的帮助!

刚看到这个问题,现在有更新了吗? - axl411
不幸的是,我不得不选择在 Pod Lib 中不混合这两种语言的路线。 - Ciprian Rarau
好难过啊...我有一个用Objective-C编写的私有pod库,它太大了,一次性重写成Swift几乎是不可能的。现在我只能继续使用Objective-C。 - axl411
2个回答

8

在CocoaPods中,这实际上非常简单。你只需要在.podspec文件中定义这些行。

s.source_files = '{YOUR_POD}/Classes/**/*.{swift,h,m}'
s.public_header_files = '{YOUR_POD}/Classes/**/*.h'

"s.public_header_files" 可自动创建一个充当桥接头文件的伞形头文件。这样,您就应该能够在 Swift 类中使用 Objective-C 类了。
您还可以在 Objective-C 中使用 Swift 类,只需在 Objective-C 文件中导入 -swift 头文件即可。
#import <YOUR_POD/YOUR_POD-Swift.h>

只要依赖关系是单向的,就不会出现任何问题。

请注意,您不能以这种方式在常规头文件中包含Swift头文件,但是您可以在实现文件中执行此操作。请参见https://dev59.com/Y18d5IYBdhLWcg3w41gp#28484941。 - apollov

3
在您的.podspec文件中,应该有类似以下的内容:

s.source_files = 'MixSwiftObjectiveC/Classes/*'

  • 前往Finder中的MixSwiftObjectiveC/Classes/目录,确保将您的文件(包括Objective-C和Swift文件)放入其中。
  • 清除构建文件夹。
  • 导航到您的Example..文件夹,并执行pod install命令(因为您的Example..文件夹下应该有一个Podfile文件,其中包含您的MixSwiftObjectiveC库)。
  • 构建项目,这样就不会再出现问题了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接