swift与OC的混编

工程swift与OC混编改造 因此无论A和B是用什么语言编写的,只要编译器B本身能够识别出对应的语言A的声明,那么就可以在B的编译过程中标记A.function,并产出规定格式的.o文件。编译阶段,B.m将B自身的方法地址全部编入符号表,但是编译的过程会碰到对A.function的调用,这个时候编译器检查A.function是否有声明,明确有(跟着A.h头文件copy过来的),但是并没有相应的实现,因此会将A.function的引用做一个特殊标记,并在重定位表中记录,等待静态链接成功后修改为指向A.function真实所在的地址。 阅读详情

为什么要混编?

  • 语言发展趋势(TIOBE),Swift 排行持续上升, OC 排行呈重力下降
  • 项目正常迭代需要 
    • 很多第三方库仍然使用 OC 实现
    • 项目中原来已经用 OC 实现的模块如果使用 Swift 重写,代价稍大
    • 我们需要在项目中使用 Swift 才能真正碰到问题,解决问题

注:不是为了混编而混编。混编只是在对开发资源、项目管理和技术发展趋势进行综合衡量之后做出的比较合理的选择。

如何开始混编?

步骤

  1. 创建工程,Language 选择 Swift 或 Objective-C 都可以。

    这里写图片描述

  2. 创建 Swift 文件并添加 bridging header 文件

    这里写图片描述

    添加 Swift 文件时 Xcode 会自动提示你添加 bridging header 文件,选择 Yes 即可

  3. 进行两处关键设置

    这里写图片描述 
    这里写图片描述

    这两处设置 Xcode 默认都会设置好,可以把 Objective-C Bridging Header 和 Objective-C Generated Interface Header Name 改成自己想设置的名字。

至此Swift 与 Objective-C 混编的环境就算配置完成了。

XXX-Bridging-Header.h

如果需要在 Swift 中使用 OC 的代码或者库,只需要在这个文件中 import 相应代码或者库的头文件即可。

XXX-Swift.h

和 XXX-Bridging-Header.h 不同,XXX-Swift.h 文件不会出现在项目中,而是由 Xcode 自动生成,你可以在类似如下的路径下找到相应项目的 XXX-Swift.h 文件:(PS:演讲时没有写到PPT里面,实在抱歉)

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">/Users/perry/Library/Developer/Xcode/DerivedData/XXX<span class="hljs-attribute" style="box-sizing: border-box;">-bhlzdinkujybftbjmgwjwclndmss</span>/Build/Intermediates/XXX<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>build/Debug<span class="hljs-attribute" style="box-sizing: border-box;">-iphonesimulator</span>/XXX<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>build/Objects<span class="hljs-attribute" style="box-sizing: border-box;">-normal</span>/x86_64/XXX<span class="hljs-attribute" style="box-sizing: border-box;">-Swift</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>h</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

如果需要在 OC 中使用 Swift 代码,在使用的文件中 #import XXX-Swift.h (PS:其他一些在 OC 中使用 Swift 代码的注意事项会在后面详细说明)

查看 XXX-Swift.h 文件中的代码:

这里写图片描述

不难发现这个文件中的内容其实是将 Swift 中的代码转换成了 OC 的代码。

注:如果对项目进行清理操作,这个文件也会被删除,而且在重新构建的过程中,只有在所有的 Swift 代码都编译通过的情况下才会重新生成这个文件。

结合框架的混编

这里写图片描述

iOS UMeng OC和Swift混编 设置Objective-C桥接文件导入SDK头文件在UMengDemo-Bridging-Header.h中加入U-Share SDK头文件://导入UMCommon的OC的头文件//导入UShare的OC的头文件//导入UMAnalytics的OC的头文件//导入UMPush的OC的头文件UMengDemo的OC和Swift的切换UMengDemo是用OC的代码编写的,同时也兼容了swift3.0的调用示例(UMengDemo不再对swift2.0做示例兼容). 阅读详情

相关推荐

【福建dem】原始高程数据tif格式

DEM(Digital Elevation Model,数字高程模型)是一种地理信息系统中的关键数据集,它提供了地表地形的三维信息,通常用于分析地貌特征、模拟水文过程、规划建设、灾害预警等多个领域。这种数据对于地理分析非常有价值,例如,它可以用于计算坡度、坡向、地形粗糙度等地形特征,或者进行洪水模拟、地质灾害评估、太阳能辐射分析等。“福建dem原始高程数据tif格式”是研究和理解福建省地形地貌的重要资源,结合GIS工具,可以揭示丰富的地理信息,为科研、工程和决策提供有力支持。

鸿业远图科技 944

在objective-c中导入Swift,"工程名-Swift.h" 文件找不到

Oc中导入Swift,”工程名-Swift.h” 文件找不到。 已知问题有两个 A.设置Product Module Name 为当前工程名。注意:工程名字不要含有特殊字符(例如 +)**Target-> Bulid Settings ->输入packa 设置Defines Module 为Yes** B. 如果未设置,或者更改了工程名字了,报错 找不到文件。尝试用以下命令找到”工程名-Swif

滤镜的专栏 6275

Java Swing之多文档界面设计-JDesktopPane、JInternalFrame类简单应用示例

Java MDI多文档界面是一种用户界面风格,允许在一个主窗口中包含多个子窗口(文档窗口),每个子窗口可以显示不同的内容或功能模块,从而可以满足用户打开不同窗口完成不同功能的需求。开发多文档程序,一般需要JDesktopPane(桌面面板类)和JInternalFrame(内部窗体类)两个类。以下简单介绍,最后通过一个实例介绍实现逻辑。

编程语言教学工作者的博客 2209

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码? 随着苹果公司对Swift的推广力度不断加大,市场上很多的项目都在逐步的转向使用Swift开发,但由于各种原因,公司不可能一时间直接冲OC转向Swift,因此中间就会有一个过渡期,需要我们程序员进行OC和Swift两种语言之间进行混合编程.下面我就给大家介绍一下,混编之前我们应该怎么配置. 一、OC的代...

weixin_33681778的博客 182

Docker “docker login“ 失败? 登录阿里云镜像仓库仓库 unauthorized: authentication required

文章目录听说你 login fail?来,让我们解决一下!登录,撒花 听说你 login fail? 美滋滋的在服务器上安装完成Docker应用,开始配置阿里云镜像加速?然后被阿里云官方文档蹂躏?别急别急,让我来拯救你。 我们先来看看 阿里云官方文档 Docker镜像基本操作: 好家伙,emmm… 上来直接就Login Succeeded,这不简直so easy?我们也来照着操作操作: docker@default-online:~$ docker login registry.cn-hangzhou.a

zhuzicc的博客 1万+

Tushare Pro的安装使用——“抱歉,您没有访问该接口的权限,权限的具体详情访问:https://tushare.pro/document/1?doc_id=108”问题

最近做毕设关于量化交易的, 因此一直使用tushare作数据源,但是过程中到一些问题,因此这里写篇文章,供大家一起交流下。 Tushare简介 Tushare是一个免费、开源的python财经数据接口包。拥有如股票、基金、期货等行情数据,公司财务、基金经理等基本面数据,以及债券、外汇、行业、大数据、区块链。Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,因此非常方便...

sinat_40875078的博客 1万+

Swift与OC混编

Swift与OC的混编可以总结出以下几种场景 OC&Swift Mixed In The Same Target Project中OC 调用 Swift Pod中OC 调用 Swift Project中Swift 调用 OC Pod中Swift 调用 OC OC&Swift Mixed In The Different Target OC Project 调用 Swift Pod Swift Project 调用 OC Pod OC Pod 调用 Swift Pod Swift

u012477117的专栏 7519

Ubuntu 24.04 + RTX 5090 部署 OpenVLA-OFT:从环境配置到机器人任务评估实战

本文详细记录了在Ubuntu 24.04 LTS系统上,为全新RTX 5090显卡配置CUDA 12.8+与PyTorch 2.7.1+开发环境,并成功部署OpenVLA-OFT视觉语言模型进行机器人任务评估的完整实战流程。文章重点解决了驱动安装、依赖版本冲突、路径设置等核心难题,为在最新硬件上运行先进AI机器人模型提供了可靠的避坑指南和性能观察。

n8m7b6v5c4的博客 596

Swift与OC的混编

一、OC调用swift文件   在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,如下图:      点确定创建桥接文件,Xcode会自动创建一个桥接文件,其名字为:工程名-Bridging-Header.h      这个桥接文件是 swift 调用OC文件的时候用的 1.配置 进入TARGETS -&amp;amp;gt;Build Settings -&amp;amp;g...

chenzimin_blog 3238

KEPServerEX实战:Modbus TCP与RTU双协议配置详解

本文详细解析了如何使用KEPServerEX软件同时配置与管理Modbus TCP和RTU混合网络。通过实战步骤,指导用户建立双协议通道、配置设备与标签,并分享核心的地址映射规则与通讯故障排查技巧,帮助工业自动化工程师高效集成多协议设备,简化数据采集架构。

weixin_29186249的博客 397

解决Android API 30+视频播放抖动问题

摘要:本文探讨了Android开发中使用ExoPlayer在API 30+设备上出现的视频抖动问题。作者发现API 30以下版本运行正常,但API 30及以上版本会出现画面不稳定现象。解决方案是改用TextureView替代SurfaceView,通过修改PlayerView配置并设置setUseTextureView(true)来增强播放稳定性。这一简单改动有效解决了API兼容性问题,为开发者提供了实用的解决方案。

m0_62153576的博客 119

15、OC与Swift的混编

在使用Swift进行iOS开发的过程中,经常涉及到Swift与OC混编的情况,有时主工程是OC的需要另外编入Swift代码,而有时主工程是Swift的需要另外编入OC代码。这其中涉及到修改一下XCode的工程配置。 1、在同一个工程中的混编 在Swift 5.1中,两种混编的实现步骤: Swift访问OC:只需要在桥接文件(ProductName-Bridging-Header.h)中导入需要暴露给Swift的OC类,即可在Swift中访问相应OC类及方法。 OC访问Swift:在OC类中导入Pro

重楼的博客 3584

YOLO26涨点改进 | 小目标损失函数独家改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

目录一、前言:YOLO26原生损失函数在小目标检测中的核心痛点(涨点瓶颈)1.1 小目标权重不足,聚焦能力薄弱1.2 样本分布不平衡适配性差,正负样本权重失衡1.3 训练不稳定,易出现梯度消失/震荡1.4 未区分小目标与背景的冗余干扰,误检率高二、TGRS 2025顶刊灵感解析:自适应聚焦损失的核心逻辑三、全网独家创新:AdaFocalLoss损失函数设计与YOLO26适配(核心重点,可复现)3.1 AdaFocalLoss函数整体设计(独家设计,清晰可复现)3.2 各核心模块详细设计(独家创新,可直接复现

qq_36130719的博客 203

OC和Swift混编相互调用

现在咱们就一起学习下 OC和Swift混编,如何实现呢? 首先创建一个OC项目 这里不在做详细解释,直接进入 打开项目; 一 、添加swift 文件 (只要是混编 无论是在oc项目中添加swift文件 ,还是swift项目中添加oc文件) 会提示添加一个桥文件 名字为oc_swift-Bridging-Header.h下面都用这个名字(如图) 这个时候 我们只需要点击确定即可; 这个桥文件是用来添加 swift使用oc的时候导入头文件使用的 扩充 — 这个文件oc_swift-Bridging-Head

哈皮吖的博客 5468

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Swift4与OC的混编

一、OC调用swift文件 在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,如下图: 点确定创建桥接文件,Xcode会自动创建一个桥接文件,其名字为:工程名-Bridging-Header.h 这个桥接文件是 swift 调用OC文件的时候用的 1.配置 进入TARGETS -&amp;gt;Build Settings -&amp;gt; Packaging 中设置Def...

iOS_MingXing的博客 568

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

OC与swift混编之--OC中使用swift写的类

前言 写项目时发现有的方法OC时没有,需要用swift来实现的,于是就跳进了混编配置的坑,参照了许多博客,爬了一上午才爬出来,在这总结一下我挖坑和填坑的经历,如有错误,欢迎纠正。 需求:OC项目中使用新建swift文件的类 问题:新建swift文件时,笔者的Xcode没有提示生成桥接文件,需要自己配置并手动创建桥接文件,最后在OC中成功引用swift写的类 项目说明:没有使用framework与pod 重要的配置及文件认识 Target–Building Setting–Packing Def

Ziy的博客 1857

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Swift与OC混编过程中的配置

级别: ★★☆☆☆ 标签:「iOS」「Swift 」「Swift与OC混编」 作者: dac_1033 审校: QiShare团队 在使用Swift进行iOS开发的过程中,经常涉及到Swift与OC混编的情况,有时主工程是OC的需要另外编入Swift代码,而有时主工程是Swift的需要另外编入OC代码。这其中涉及到修改一下XCode的工程配置,还有一些其他细节,下面我们就来介绍一下。 1. ...

weixin_30595035的博客 347

OC与Swift混编

swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,哪就使用混编。这个在IOS8中是允许的。 先中简单的入手,先研究在同一个工程目录下混合使用的情况。 为了演示。先准备两个类 第一个是swift语言写的类,文件名为 act.swift [cpp] view plainco

wenhaiwang的专栏 908

swift与OC混编(方法调用)

原创文章转载请注明出处。 背景在上一篇文章中简单讲述了怎么创建Swift和OC的混编工程。本篇讲一下Swift和OC的混编工程中的方法调用。OC调用SwiftOC调用Swift方法比较简单。但是需要注意以下几点: 1.需要在当前OC类里导入xxx-Swift.h头文件,其中xxx为项目名称(与你的项目配置相关,具体配置方式见上一篇文章) 2.OC类里仅可以调用public的Swift方法和变量 3.

有梦想的蜗牛 1万+

OC和Swift混编(一)——OC与Swift相互调用

WWDC推出了SwiftUI、Combine,仅Swift可用~为了能顺利的也吃上SwiftUI,我也打算将自己的项目先从OC慢慢迁移到Swift,所以~一起从混编开始! 创建Swift的view 正常创建文件,语言选swift 创建Bridging Header 上一步,点完next,系统会提示如下弹框。点create Bridging Header oc使用Swift文件 导入头文件,在...

weixin_34150224的博客 1211

OC Swift混编 记录

OC 项目混编Swift 在OC项目中初始创建swift文件时,会提醒创建桥接文件 点击 Create Bridging Header 就会生成一个桥接文件 如果误点导致没有创建桥接文件,可手动创建一个 “工程名-Bridging-Header.h" 的头文件,然后在工程中配置文件(参考下一步) 工程配置 target | Build Settings swift 引用 OC ...

VictorZhang 643

swift-oc混编分享

swift和OC混编的思路,混编过程碰到了哪些问题,系列组件分享

鹏仔的技术博客 1774

OC与Swift混编,三种场景的实现方式

多语言并存时期,混编成为一种必须的方式 ,在多场影中实现OC和Swift语言的并存原来是如此简单 第一种场景,App中实现混编 创建桥接文件*.h 新建一个桥接文件,New File选择Header File创建 指定桥接文件 project->targets->Build Setting->All->Swift Compilter General-&gt...

WW15253061122的博客 431

OC和Swift混编

swift通过xxx-Bridging-Header.h调用oc。oc通过xxx-swift.h调用swift。创建swift项目,xcode会自动创建xxx-Swift.h供oc调用swift使用。如果需要swift调用oc,需要创建xxx-Bridging-Header.h文件。oc通过xxx-Swift.h调用swift。swift通过xxx-Bridging-Header.h调用oc。需要先创建xxx-Bridging-Header.h,才会生成xxx-swift.h文件。

逆袭的菜鸟X 786

如何实现OC与Swift混编

之前一直没有总结这块的相关知识,现在有幸给大家介绍一下我自己的小经验,如有不对之处欢迎纠正! 苹果推出swift之后版本一直不稳定,每一次更新都会修改很多方法,这让我们这些程序员使用起来有些投鼠忌器,不过3.0版本出现之后swift趋于平稳,相信会有越来越多的开发者会开始使用swift进行APP开发。 那么问题来了,很多工程都是用OC语言开始开发的,如何才能引入swift文件呢

毛毛虫 627

iOS 在OC旧项目中使用Swift进行混编

在OC 旧项目中使用swift进行混编

yizhiliulangdemiao的博客 1906
上一篇: swift-代理方法
下一篇: swift3.0 - 闭包(block)
董其林
博客等级 码龄11年 1粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值