【问题标题】:How to use Objective-C CocoaPods in a Swift Project如何在 Swift 项目中使用 Objective-C CocoaPods
【发布时间】:2015-08-07 18:35:09
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c swift cocoapods


    【解决方案1】:

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

    更重要的问题是“如何使用这些库?”
    这个问题的答案取决于Podfile 中的use_frameworks! 标志:
    假设您想使用名称为 CoolObjectiveCLib 的 Objective-C pod。

    如果你的 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)?
    • 我在我的 swift 项目的 podfile 中未注释 use_frameworks 并想使用 Toast pod,它实际上是一个 Objective-c 类别。通过简单的写 import UIView+Toast 给我编译错误:一行上的连续语句必须用';'分隔
    • @CunchalRaj 是您的 pod 的 UIView+Toast 名称?如果不尝试使用名称与您的 pod 名称匹配的导入框架。
    • 我使用相同的代码来使用 objc 代码来 swift 文件,但它给了我错误 no such a module "POD NAME" ,我需要设置任何其他标志
    • 如果您在使用 use_frameworks! 时遇到问题,可能是因为导入语句的格式不正确。例如如果 podFile 包含 pod 'iOS-Echarts',则导入应如下所示: Swift 文件import iOS_Echarts Objective-C 文件#import <iOS_Echarts/iOS-Echarts.h>
    【解决方案2】:

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

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

    #import "xxxxxxx/xxxxxxx-umbrella.h"
    

    它对我有用。

    【讨论】:

      【解决方案3】:

      你只需要一个桥接头并在那里导入你需要的东西。

      【讨论】:

        【解决方案4】:

        并且不要忘记将 Bridging Header 文件名添加到 Target -> Build Settings -> Objective-C Bridging Header

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-25
          • 2023-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多