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

yvt65v4c  于 2022-11-06  发布在  Swift
关注(0)|答案(3)|浏览(219)

我已经使用以下命令创建了一个新的swift lib pod:在https://guides.cocoapods.org/making/using-pod-lib-create.html中找到创建MixSwiftObjectiveC容器库
在这个pod库中,我需要使用Objective-C编写的代码。如果我有一个单独的“普通”项目,我只需要在头文件中包含导入... -Bridging-Header.h。有没有一个pod库的等价物?Swift和Objective-C可以在一个pod库中混合吗?
作为一个例子,我创建了这个github:https://github.com/crarau/MixSwiftObjectiveC为了运行该示例,您需要XCode版本7.0 beta 6和Swift 2.0

谢谢你的帮助!

2sbarzqh

2sbarzqh1#

注意:此答案已过时,不再相关。请参阅https://stackoverflow.com/a/61183908/3160507以获取最新的答案。
我确定了一个可行的解决方案,其工作原理如下:
1.它必须是iOS 8+只(当然...)
1.使用Xcode创建可可Touch框架
1.开发框架,根据需要混合swift代码和objc代码。确保将所有需要公开的swift类标记为public。您可能需要参考文档
1.创建一个podspec文件,提供必要信息(请参阅here了解pod的外观)。(在您的框架中用于向swift公开objc代码)。当您创建框架项目时,Xcode会自动为您的框架创建一个伞状标题。如果您的框架名称是NVMDummy,报头是NVMDummy.h
1.推动pod并将其作为框架集成到项目中。
1.测试你的pod库。我创建了一个演示应用,添加了我的pod库,在我的ViewController.m中,我做了以下操作:

@import MyPodLibMixingOjbcAndSwift;

 // in viewDidLoad
 // use objc code in MyLib -> OK...
 // use swift code in MyLib -> OK...

演示应用程序工作,所以我得出结论,它的工作。
以下是演示:https://github.com/axl411/TestNVMDummy

7hiiyaii

7hiiyaii2#

这在cocopod中实际上是非常直接的。您只需要在.podspec文件中定义这些行。

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

“s.public_header_files”会自动创建一个伞状头文件,它也可以作为桥接头文件。这样你就可以在swift类中使用ObjC类了。
你也可以在ObjC中使用swift类。你只需要在ObjC文件中导入-swift头。


# import <YOUR_POD/YOUR_POD-Swift.h>

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

sbdsn5lh

sbdsn5lh3#

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

一个月一个月

  • 转到finder中的MixSwiftObjectiveC/Classes/目录文件夹以确认并将您的文件(objc和swift)
  • 清除生成文件夹
  • 导航到您的Example..文件夹并执行pod install(因为您的Example..文件夹下应该有一个Podfile,该文件夹包含您的MixSwiftObjectiveC窗格)
  • 你就不会再有问题了

相关问题