如何在Swift项目中使用Objective-C CocoaPods


83

有什么方法可以在我的Swift项目中使用swift使用用Objective-C编写的CocoaPod吗?

我只是制作桥接头吗?如果是这样,我可以在Swift中访问CocoaPod中的库定义的对象,类和字段吗?

Answers:


169

问题的基本答案是,可以,您可以使用由CocoaPods构建的Objective-C代码。

更重要的问题是“如何使用此类库?”
这个问题的答案取决于use_frameworks!您中的标志Podfile
假设您要使用带有name的Objective-C pod CoolObjectiveCLib

如果您的pod文件使用use_frameworks!标志:

// Podfile
use_frameworks!
pod 'CoolObjectiveCLib'

然后,您无需添加任何桥头文件。
您需要的一切都是Swift源文件中的导入框架:

// MyClass.swift
import CoolObjectiveCLib

现在,您可以使用lib中提供的所有类。

如果您的Pod文件不使用use_frameworks!标志:

// Podfile
pod 'CoolObjectiveCLib'

然后,您需要创建桥接头文件,并将所有必需的Objective-C头导入其中:

// MyApp-Bridging-Header
#import "CoolObjectiveCLib.h"

现在,您可以使用在导入的标头中定义的所有类。


如何从pod .m文件内部访问swift类(以防我想自定义这些pod)?
JAHelia '16

1
我在swift项目的pod文件中没有对use_frameworks进行注释,并想使用Toast pod,它实际上是一个Objective-C类别。通过简单地编写import UIView + Toast,我得到了编译错误:行上的连续语句必须用';'分隔。
Chanchal Raj

@ChanchalRaj是UIView+Toast您的吊舱的名称吗?如果不是,请尝试使用名称与您的广告连播名称匹配的导入框架。
弗拉德·帕普科

1
我曾经使用过相同的代码来使用objc代码来快速处理文件,但是它给我的错误是没有这样的模块“ POD NAME”,我是否需要设置任何其他标志
Prashant Tukadiya'May

4
如果您遇到use_frameworks的问题,这可能是因为导入语句的书写格式不正确。例如,如果podFile包含pod 'iOS-Echarts',则导入将如下所示: Swift文件import iOS_Echarts Objective-C文件#import <iOS_Echarts/iOS-Echarts.h>
Kushal Ashok

2

在podFile中使用标志use_frameworks!在Pod依赖关系的文件夹结构中的Xcode内,添加xxxxxxx-umbrella.h支持文件。

在您{PROJECT_NAME}-Bridging-Header.h使用时:

#import "xxxxxxx/xxxxxxx-umbrella.h"

这个对我有用。



0

并且不要忘记将桥接头文件名添加到目标->构建设置-> Objective-C桥接头

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.