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

87

有没有一种方法可以在Swift项目中使用用Objective-C编写的CocoaPod?

我只需要创建一个桥接头文件吗?如果是这样,我是否可以在Swift中访问由CocoaPod库定义的对象、类和字段?

4个回答

175
Yes, 您可以使用使用CocoaPods构建的Objective-C代码库。更重要的问题是“如何使用这些库?”,答案取决于您的Podfile中是否有use_frameworks!标志。假设您想使用名称为CoolObjectiveCLib的Objective-C Pod。如果您的Podfile使用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"

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

1
我在我的Swift项目的Podfile中取消注释了use_frameworks,并想使用Toast pod,它实际上是一个Objective-C类别。仅仅写入import UIView+Toast就给我带来了编译错误:一行上的连续语句必须用';'分隔开。 - Chanchal Raj
@AbhishekThapliyal 到底是什么不起作用?或者你看到了什么错误? - Vlad Papko
1
我已经使用相同的代码将Objective-C代码用于Swift文件,但是它给了我一个错误:没有这样的模块“POD NAME”,我需要设置其他标志吗? - Prashant Tukadiya
@VladPapko 我找到了解决方案,我正在使用静态库,所以它无法工作,所以我找到了解决方案,我必须使用Umbrella bridging。 - Prashant Tukadiya
5
如果你在使用 use_frameworks! 时遇到问题,可能是因为导入语句的格式不正确。例如,如果 Podfile 包含 pod 'iOS-Echarts',则应按以下方式进行导入:Swift 文件: import iOS_EchartsObjective-C 文件: #import <iOS_Echarts/iOS-Echarts.h> - Kushal Ashok
显示剩余9条评论

3

在podFile中使用标志use_frameworks! 在Xcode中在依赖项的Pod文件夹结构中,您可以在Support Files中添加xxxxxxx-umbrella.h

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

#import "xxxxxxx/xxxxxxx-umbrella.h"

对我来说它有效。


0

你只需要一个桥接头文件,然后在那里导入你所需的内容。


0

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


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