OC和Swift混合开发(Pod私有库的相互引用)

这篇具有很好参考价值的文章主要介绍了OC和Swift混合开发(Pod私有库的相互引用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境 Xcode 12.4,    Swift:5.0

概述:该文档主要介绍OC和Swift混合开发相互调用,包括3大类情况和12种具体情形。

三大类情况:

1. 主工程内的混合互调,

2. 主工程和Pod三方库之间的混合互调,

3. Pod三方库和其他Pod三方库之间的混合互调。

十二种情形:

1. 主工程内的OC 调用 主工程内的OC:

#import "NSObject.h" 

导入头文件直接调用。

2.  主工程内的OC 调用 主工程内的Swift:

   1. 主工程中创建.pch文件,在TARGETS -> Build Setting -> 搜索pch -> 设置.pch文件的路径,

   2. 在.pch文件中添加 :

      例如:#import "xxxxx_Swift.h"

       (该文件命名规则为:"工程名_Swift.h",该文件为系统自动生成) ,

   3. 编译之后才可自动识别需要调用的Swift的文件 。

3. 主工程内的OC 调用 OC的Pod三方库:

   #import    导入头文件直接调用。

4. 主工程内的OC 调用 Swift的Pod三方库:

   1. 如果仅在某个OC文件内调用该Swift库,在该库中导入头文件:@import 包的名字; 

      例如:@import RxSwift;

       (不要给库文件名添加<>或者" "、不要遗漏分号";") ,

   2. 如果是全局多处调用该Swift库,在.pch文件 中导入头文件(导入规则同上) 。

5.  主工程内的Swift 调用 主工程内的OC:

   1. 自动创建桥接文件 (在OC或者Swift项目中第一次创建Swift或者OC文件时Xcode会自动提示创建桥接文件 ->` xxxxx-Bridging-Header.h`) ,

   2. 手动创建桥接文件(首先需要创建一个空的.h文件,命名规则为:`项目名-Bridging-Header.h`; 设置桥接文件的路径:  在TARGETS -> Build Setting -> 搜索Bridging -> 设置桥接文件的路径:``工程名/桥接文件所在的文件夹名/桥接文件的名字``) ,导入需要调用的OC的头文件,

      例如:#import "NSObject.h"

6.  主工程内的Swift 调用 主工程内的Swift:

   主工程内的Swift调用主工程内的其他Swift不需要添加头文件等引用,可以直接调用。

7.  主工程内的Swift 调用 OC的Pod三方库:

   在桥接文件中添加需要调用的OC库的头文件。

   例如:#import <AFNetworking/AFNetworking.h>

  编译后可以直接调用

8.  主工程内的Swift 调用 Swift的Pod三方库:

   1. 只在某个Swift文件内调用该Swift库,在该Swift的文件中导入该Swift库的头文件,导入规则:`import RxSwift`(此处导入不添加@、不添加分号、不添加引号) ,

   2. 全局多处调用该Swift库,在主工程的`.pch`文件中添加该Swift库的头文件:`@import 包的名字; `

      例如:@import RxSwift; 

      (不要给库文件名添加<>或者""、不要遗漏分号";") ,

   3. 编译后调用时才会出现自动提示 。

9.  OC的Pod三方库 调用 OC的Pod三方库:

   1. Pod文件夹下的`.podspec文件`内添加依赖,例如:`s.dependency 'AFNetworking'`

   导入头文件:例如:#import <AFNetworking/AFNetworking.h>

   2. 导入头文件直接调用。

10.  OC的Pod三方库 调用 Swift的Pod三方库:

    1. 在OC库的Pod文件夹下的`.podspec文件`内添加对该Swift库的依赖(例如:`s.dependency 'TestSwift1', ~'0.1.0'`),

    2. 单独调用该Swift库,只需在这个OC文件内导入Swift库头文件即可(例如:`@import RxSwift;`[不要给库文件名添加<>或者""、不要遗漏分号";"] ),

    3. 全局调用该Swift库,在该OC库中创建`.h文件`(可以任意命名,但为了保持统一性,命名规则参照桥接文件的命名规则) -> 在OC库的Pod文件夹下的`.podspec文件`中添加对`.h文件`的引用(`s.prefix_header_contents = '#import "该OC库名-Bridging-Header.h"`)  -> 重新pod update工程 -> 该`.h文件`会自动添加到OC库的`Support Files文件夹`下的`.pch文件`中 -> 在`.h文件`内导入Swift库的头文件即可(例如:`@import RxSwift;`[不要给库文件名添加<>或者""、不要遗漏分号";"] )。

11.  Swift的Pod三方库 调用 OC的Pod三方库:

    1. Swift库内混编:在Swift库中进行库内的混编时,创建OC文件后pod update时,OC文件的头文件会被自动添加到该Swift库的`Support Files文件夹`下的`-umbrella.h文件`中 -> 可以直接调用,

    2. Swift库内依赖OC库混编:在该Swift库的`Pod文件夹`下的`.podspec文件`内添加依赖OC库(例如:`s.dependency 'AFNetworking, ~'2.3'`) -> 在主工程的`Podfile文件`中对调用的OC库做特殊处理添加(`:modular_headers => true ->` 例如:`pod 'AFNetworking', '2.3', :modular_headers => true`),

    3. 在Swift库内创建.h文件(可以任意命名,但为了保持统一性,命名规则参照桥接文件的命名规则) -> 此处不需要进行头文件的依赖和引用,直接进行pod update 后,该Swift库的`.h文件`会被自动同步添加到该Swift库的`Support Files文件夹`下的-`umbrella.h文件`中 -> 在Swift库内新建的.h文件中添加需要依赖的OC库的头文件(例如:`#import <AFNetworking/AFNetworking.h>`),

    4. 编译后调用时才会出现自动提示。

12.  Swift的Pod三方库 调用 其他Swift的Pod三方库:

    1. 在该Swift库的Pod文件夹下的`.podspec文件`内添加依赖其他Swift库(例如:`s.dependency 'HandyJSON',  ~'5.0.2'`) -> pod update,

    2. 单独调用其他Swift库,只需在调用其他Swift库的文件中添加其他Swift库的头文件,例如:`import HandyJSON`(注意:不添加@、不添加分号、不添加引号),

    3. 全局调用其他Swift库,在Swift库中创建`.h文件`(可以任意命名,但为了保持统一性,命名规则参照桥接文件的命名规则) -> pod update -> 该`.h文件`会被自动同步添加到Swift库的`Support Files文件夹`下的`-umbrella.h文件`中 -> 在新建的`.h文件`中添加其他Swift库的头文件(例如:`@import HandyJSON;`(不要给库文件名添加<>或者""、不要遗漏分号";"、不要遗漏@)。



作者:凯司机
链接:https://www.jianshu.com/p/ab424f811889
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。文章来源地址https://www.toymoban.com/news/detail-837448.html

到了这里,关于OC和Swift混合开发(Pod私有库的相互引用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • iOS从UI内存地址到读取成员变量(oc/swift)

    开发调试时,我们发现bug时常首先是从UI显示发现异常,下一步才会去定位UI相关连的数据的。XCode有给我们提供一系列debug工具,但是很多人可能还没有形成一套稳定的调试流程,因此本文尝试解决这个问题,顺便提出一个 暴论 :UI显示异常问题只需要两个步骤就能完成定位

    2023年04月19日
    浏览(83)
  • 力扣题目学习笔记(OC + Swift)24. 两两交换链表中的节点

    给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 首先定义递归终止条件: head.next不存,代表链表结束了 head.next.next不存在,表示不能两两配对 Swift OC 用到了解决链表问题的

    2024年02月04日
    浏览(43)
  • (flutter)黑苹果系统 Xcode iOS flutter 跑通真机模拟器 此oc clover 彼oc swift

    前段时间写了关于flutter的一系列基础知识和入门的一些坑,中间把ios端的项目编译部署等工作一带而过,这里我觉得还是有必要专门写一篇文章来讲讲这个,顺便把环境问题也一起说了。 我们都知道开发ios应用需要用到苹果电脑,即使flutter也不例外,flutter编译构建需要Xc

    2024年02月07日
    浏览(61)
  • 关于Swift中闭包和OC中block对局部变量基本数据类型值的捕获

    翻了很多文章,发现关于Swift闭包关于上下文变量捕获这块,都没有说的很详细,或者Swift2这样的老版本已经不适用了,问了GPT也是和自己实验的结果不一样,记录下来。 首先,回顾一下OC中的block。 block对局部变量基本数据类型的捕获,是在创建时捕获了值,并保存副本在自

    2024年02月16日
    浏览(45)
  • Swift基础语法&SnapKit自动布局库的使用

    本文详细记录了作者在学习Swift语言和使用SnapKit库过程中的心得体会,同时也探讨了全局文件的使用和懒加载的实现。

    2024年02月08日
    浏览(53)
  • iOS开发Swift-闭包

    将很长的闭包表达式作为最后一个参数传递给函数,不用写出他的参数标签。 嵌套函数可捕获其外部函数所有参数、变量、常量。 当一个闭包作为一个参数传到一个函数中,但闭包在函数返回之后才被执行,则称闭包逃逸。 标注@escaping,表示允许闭包逃逸。  包装传递给函数

    2024年02月11日
    浏览(63)
  • iOS开发Swift-枚举

    枚举:一组相关的值定义了一个共同的类型,使你可以在代码中以类型安全的方式来使用这些值。 原始值:定义枚举时被预先填充的值。 (1)整数为原始值时,隐式赋值递增1。未设置原始值时,默认为0,之后递增1. (2)字符串为原始值,隐式赋值为枚举成员的名称。

    2024年02月11日
    浏览(56)
  • iOS开发Swift-函数

     (1)无参函数 (2)多参函数 (3)无返回值 (4)多重返回值 (5)可选元组返回类型(元组可以是nil) (6)隐式返回的函数 任一可以被写成一行return的函数,return(x) + for。 调用的时候: 方法名(for: 参数) (1)指定参数标签 (2)忽略参数标签 (3)默认参数值 (4)可变参数 一个可变参数可接受0个或多

    2024年02月11日
    浏览(55)
  • iOS开发Swift-控制流

    (1)复合匹配 (2)区间匹配 (3)元组匹配 (4)值绑定匹配 (5)where continue, break, fallthrough, return, throw continue: 停止本次循环,开始下次循环 break: 立即结束整个控制流。可以使用break忽略switch的分支。 fallthrough贯穿: switch中的case加入贯穿,case会穿透到下一个case/ default。

    2024年02月11日
    浏览(55)
  • iOS开发Swift-类型转换

    1.Int或Double转字符串 2.Double转Int(去掉小数点后面的) 3.Int转Double 4.向上转型 5.向下转型

    2024年02月09日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包