Swift与objective-c混编整理

最新整理:iOS面试题-面试常问问题(二) 前言: 最近把 iOS 面试中可能会遇到的问题整理了一番, 题目大部分是网上收录的, 方便自己巩固复习, 也分享给大家; 希望对大家有所帮助! 对于答案,不一定都合适,欢迎大家积极讨论;整理不易,如果您觉得还不错,麻烦在文末 “点个赞” ,或者留下您的评论“Mark” 一下,谢谢您的支持 iOS面试题-面试常问问题(二) 1.C和 OC 如何混编 xcode可以识别一下几种扩展名文件: .m文件,可以编写 OC语言 和 C 语言代码 .cpp: 只能识别C++ 或者C语言(C++兼容C) .mm: 主 阅读详情

swift项目中混编 objective-c

1、新建一个 swift项目工程
2、创建一个 cocoa touch class 类, 语言选择 objective-c
IMAGE
点击next然后点 create之后会弹出如下弹窗
IMAGE
点击 Create Bridging Header创建桥接头文件。此时的项目工程文件文件如下:
IMAGE
3、检查build Settings -> swift compiler-code Generation 中的objective-c Bridging Header 设置是否为 前面创建的桥接头文件路径。在步骤 2中创建的头文件 xcode 会自动生成对应的配置。如果不小心将桥接文件删除了,然后自己手动建立一个新的桥接头文件记得检查此处配置
IMAGE
同时检查下图的配置:
IMAGE
4、我们在Person类里面添加如下代码

//Person.h文件
- (instancetype) initWithName:(NSString *)name age:(NSInteger)age;
// Person.m文件
#import "Person.h"
@interface Person()
@property(nonatomic,copy)NSString * name;
@property(nonatomic,assign)NSInteger age;
@end
@implementation Person

- (instancetype) initWithName:(NSString *)name age:(NSInteger)age{

    self = [super init];
    if (self) {

        self.name = name;
        self.age = age;
    }

    return self;
}

- (NSString *)description {

    return [NSString stringWithFormat:@"name = %@ age = %ld",self.name,self.age];
}
@end

5、然后在 swift-oc-Bridging-Header.h文件中 导入 Person.h文件

#import "Person.h"

6、使用

      let p:Person = Person.init(name: "小明", age: 18);
      print(p.description);

控制台输出:
IAMGE

存在的坑

1、swift是一门类型安全的语言,objective-c不是类型安全的。所以在OC的代码中一定要注意oc端代类的成员遍历是否能够为空, 在oc端声明属性的时候最好对象类型的属性最好能够加上nullable或者nonnull两个关键词修饰。如果不加这两个关键词修饰,在swift中默认 oc端的变量都是 nonnull。如下图:
IMAGE
那么在swift中使用该变量的时候,该变量没有被初始化或者被置成nil那么程序就会crash
如下示例:
头文件中所有的变量没有添加 nullable或者nonnull修饰
IMAGE
Person.m文件中不给 name属性初始化
IMAGE
在swift中使用name属性就会闪退
IMAGE

2、swift使用oc的第三方库有风险。

obejective-c 文件中使用 swift类

首先要导入一个 xxx-Swift.h头文件, 这个文件不用我们手动生成, 路径在

/Library/Developer/Xcode/DerivedData/xxx-doxrfnudrqzmbfgxpgidrxdpwwiw/Build/Intermediates.noindex/xxx.build/Debug-iphoneos/xxx.build/Objects-normal/arm64/xxx-Swift.h

如果不想去路径下面查看,可以在下图的位置中查看
IMAGE
* xxx 代表项目名称,如果项目中有-则 -用_替换 如:swift-oc替换成swift_oc

坑:不要在oc的.h文件中导入 。如果要用swift中的类则需要在.h文件中 @class需要使用的类。 然后在.m文件中导入 xxx-Swift.h文件 示例如下:
IMAGE

IMAGE

到这里我们在oc中使用swift类的话会发现 swift中的所有的属性和公开的方法在oc端都不能调用。点进 xxx-swift.h文件发现
IMAGE
头文件里面只有swift类的初始化方法。
解决方案:swift类所有需要暴露给 oc端的属性和方法 都要以@objc修饰。如下示例:
IMAGE

能够让oc使用的swift类是要具备一定条件的:
* Swift4.0如果要暴露接口和属性给OC的话,需要在其前加@objc关键字
* 每个Target下的Bulid Settings中的Defines Modules设置为YES
* Swift类必须继承 NSObject类或其子类
* 对于自定义的类而言,Objective-C的类,不能继承自Swift的类,即要混编的OC类不能是Swift类的子类。反过来,需要混编的Swift类可以继承自OC的类
* Swift中有许多OC没有的特性,比如,Swift有元组、为一等公民的函数、还有特有的枚举类型。所以,要使用的混编文件要注意Swift独有属性问题。
* 如Swift文件要使用OC中定义的宏,只能使用常量简单宏文件。

使用framework

使用第三方Framework
设置: target–>build setting –>Packaging –>Defines Module为 “Yes”;
然后,配置文件Target -> Build Phases -> Link Binary,添加要导入的Framework;
最后,还是要配置桥接文件,比如要使用 abc-lib.framework库中的 abc.h 就要这样配置:#import”abc-lib/abc.h”;

iOS开发面试知识整理 – OC基础 (二) iOS | 面试知识整理 – OC基础 (二) 1.C和 OC 如何混编 xcode可以识别一下几种扩展名文件: .m文件,可以编写 OC语言 和 C 语言代码 .cpp: 只能识别C++ 或者C语言(C++兼容C) .mm: 主要用于混编 C++和OC代码,可以同时识别OC,C,C++代码 2. Swift 和OC 如何调用? Swift 调用 OC代码 需要创建一个 Target-BriBridging-Header.h 的桥文件,在乔文件导入需要调用的OC代码头文件即可 OC 阅读详情

相关推荐

十年iOS开发实战复盘:从Objective-C到Swift与跨平台演进

移动应用开发领域,技术选型与工程实践始终是开发者关注的焦点。从原生到跨平台,从Objective-C到Swift,每一次技术演进都伴随着性能、效率与生态的权衡。深究其原理,内存管理、布局系统、网络层适配等底层能力决定了应用质量的上限。对开发者而言,掌握这些基础技术不仅有助于解决兼容性问题,更能在多端快速迭代中保持代码可维护性。实际场景中,无论是屏幕适配、审核上架还是崩溃治理,扎实的技术功底都能显著降低试错成本。一位十年iOS开发者的亲身经历,系统复盘了技术栈演进、适配工程、跨平台选型等核心议题,为同行与新人

weixin_34210740的博客 420

浅谈Swift和OC的区别

前言 一晃Swift3都出来快一年了,从OC到Swift也经历了很多,所以对两者的一些使用区别也总结了一点,暂且记录下,权当自己的一个笔记。 当然其中一些区别可能大家都有耳闻,所以这里也会结合自身的一些平常记录,稍许整理,才诞生了本篇文章,中间或许会有不对之处,还望指出来,共同进步。   正文 一、Swift和Objective-C的联系 Swift和Objective-C共用一套运行...

weixin_34365417的博客 1244

Swift与Objective-C的异同

但对于已经存在的Objective-C项目,或者需要与Objective-C库进行交互的情况,Swift提供了良好的兼容性。由于Swift是苹果推出的较新的语言,与Objective-C相比,它在一些方面具有更好的语言特性和更先进的功能。在使用Swift开发的项目中,如果需要使用Objective-C的代码,可以通过桥接文件来导入Objective-C的头文件。这样可以减少内存的分配和释放,提高程序的性能。例如,可以使用Swift编写新的功能模块,同时在Objective-C中使用现有的库和代码。

YUELJe的博客 1057

Swift 与 Objective-C:您应该为下一个 iOS 移动应用选择哪个?

2014 年,Apple 推出了一种更简单的新方法来构建 iOS 应用程序 - Swift。然而,在 2020 年,IT 经理和 CTO 仍然难以在 Objective-C 和 Swift 之间做出选择。为了消除任何疑问,我们比较了它们并准备了本指南。 什么是Objective-C? Objective-C 是 Apple 自 90 年代以来使用的一种面向对象的编程语言。它结合了两种早期语言 - C 和 Smalltalk 的优点。 1996 年,Apple 超过了 NeXT,后者的开发工具将使...

互动教程网[www.hdjc8.com] 1395

OC与Swift混编 注意事项

前言 随着Swift发展, 很多新的项目开始使用Swift作为首选语言。 Swift语言以其简捷,快速的特点获得了一大波粉丝,我也是其中之一。 项目背景:公司一些旧项目大都使用OC编写, 运营中的项目也会时常维护。所以在新需求开发时,我也会尝试使用Swift语言来编写(使用OC还是Swift根据项目需要来),这就涉及到OC与Swift语言的混编。 大部分的情况是OC代码调用部分Swift编写的模块。 而在混编的过程也遇到了一些问题,本文就将这些问题一一整理出来。 注意事项 1.oc调用swift的类 sw

Rey的技术博客 2235

MATLAB随机生成m个三维坐标点,且各个坐标点之间的距离不小于n

randi函数 randi(max,m,n); %生成均匀分布的随机整数,max生成的随机整数最大值,生成m行n列的矩阵 编写函数sampling function [x,y,z]=sampling(lowx,upx,lowy,upy,lowz,upz,m,n) %该函数用来产生不重复的随机整数矩阵 %low—随机整数下界;up—随机整数上界;m—坐标点个数;n—各个坐标点之间的最小距离 %编...

qq_45384561的博客 9436

iOS 开发:Object-C 和 Swift 的区别 (AI问答)

Objective-C 和 Swift 在语言类型上有显著的不同:Objective-C 使用动态类型和较弱的类型安全,适合需要灵活性的场景;而 Swift 使用静态类型和强类型安全,提供了更高的代码可靠性和安全性。理解以上回答 ,大伙需要知道编译时和运行时的区别:编译时和运行时是程序执行过程中的两个不同阶段,它们有着不同的作用和特性。理解它们的区别有助于更好地掌握编程语言和程序设计的概念。编译时主要关注代码的正确性和优化,是将源代码转换为机器可读代码的阶段。

ws1836300的博客 3775

基于UCD3138的数字控制硬开关全桥DC-DC电源设计实战解析

在开关电源设计中,数字控制技术正逐步取代传统模拟方案,以其卓越的灵活性、可编程性和强大的数据处理能力,成为应对复杂动态响应与智能化需求的关键。其核心原理在于通过高精度模数转换器(ADC)实时采样电压、电流信号,经由数字信号处理器(如ARM内核)运行PID等控制算法,动态调整数字脉宽调制(DPWM)输出,从而实现对功率级的精确控制。这种技术价值体现在能够轻松实现高级算法(如输入电压前馈、非线性补偿)、灵活配置保护参数,并通过PMBus等接口实现智能化监控与管理。其典型应用场景包括通信基站、服务器电源以及工业设

1311

来一次有侧重点的区分Swift与Objective-C

[TOC] @(swift)[温故而知新] 面试中经常被问到Objective-C与Swift的区别,其实区别还是很多的,重点整理一下个人觉得很重要的:面向协议编程。 一、Objective-C与Swift的异同 1.1、swift和OC的共同点: – OC出现过的绝大多数概念,比如引用计数、ARC(自动引用计数)、属性、协议、接口、初始化、扩展类、命名参数、匿名函数等,在Swif...

马甲包开发审核交流群:869685378 886

使用FloodRisk2插件进行洪水风险评估

入汛以来,长江流域持续的强降雨使得沿岸多地成为洪水风险极高地区,抗洪、抢险、救灾继新冠病毒之后成为又一个攻坚阵地。如何科学地评估洪水风险,是快速决策的关键。 实际生活中,根据风险是否可控,一般将洪水风险大致分为两类:一类是通过数据分析可以得出其发生的可能性和后果,如强降雨引发的区域性洪水、水库/大坝溃决洪水等。这类洪水可以通过有关资料分析和设定一定条件计算得到可能的损失后果,也就是说,风险可以预判。另一类洪水风险基本是未知的,如滑坡堵塞河道形成堰塞湖引发的洪水,无法预知事件发生的地点和规模,具体的洪水风险无

QGISClass的博客 2877

ANSYS-CFX,计算时报错,内存参数报错,return code 1【终极解决方案】

ANSYS-CFX,计算时报错,内存参数报错,return code 1【终极解决方案】 在CFX计算时经常会遇到内存不足的错误报告,有的算例网格并不多也会出现这样的问题,本文就最近遇到的内存错误问题以及解决方法进行简单的总结,以供大家参考。 1 CFX-Solver Manager内存种类 打开Define Run,面板上的Partitioner、Solver、Interpolator选项中分别都有关于内存的设置选项。当出现内存不足错误时,应该设置哪一个选项的内存参数,要看是哪一部分的内存不足。 2 C

深海民工CFDer 3万+

iOS常用宏

//常用的IOS开发宏 #pragma mark - 界面 部分 #define NavigationBar_HEIGHT 44 //导航控制器 #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) //屏幕宽度 #define SCREEN_HEIGHT ([UIScreen mainScreen].bou

394

C#利用S7netplus实现西门子S7_200_SMART PLC高效点位监控与操作

本文详细介绍了如何使用C#结合S7netplus开源库高效监控与操作西门子S7-200 SMART PLC的点位。内容涵盖从开发环境搭建、建立通信连接,到核心的点位读写、批量数据处理及字节与位数组转换等关键技术,并提供了构建稳定监控程序的架构与避坑指南,帮助开发者快速实现上位机与PLC的稳定数据交互。

rum55的博客 315

Swift和C/Objective-C混编超详解

    文章可能写得有点晚了,Swift语言已经诞生很久的时间了,现在它已经挤掉了OC很大的市场了,但是,总是存在很多老项目,或者是第三方库还没有完全翻译成Swift,因此,混编还是需要的。虽然现在详解可能有点晚,不过还是希望能写一篇关于混编的详细讲解,方便那些遇到困惑的童鞋学习和查阅。     无论是在OC工程里插入Swift,还是在Swift工程里插入OC,其实都没什么区别,因为Swift编...

fl2011sx的博客 2627

图的一些基本知识:图,邻居,度矩阵,邻接矩阵

目录前言图(graph)邻居(neighborhood)度矩阵(degree)邻接矩阵(adjacency)参考文献 前言       本文介绍了一些图论的基础知识,包括图的表示、邻接矩阵、度矩阵等(边不带权值的情况),本文中某些图片或者知识的参考/来源已列于本文最后。 图(graph)       图用G=(V, E)表示,V中元素为...

luzaijiaoxia0618的博客 6万+

【学习体会】Lighttools8.4.0:简单光学系统实例

添加球型光源(SphereSource)和表面接收器: 对光线模拟的参数进行设置: 光线追踪-模拟输入 要追踪的光线总数,决定模拟的准确度,总数越多,准确度越高,当然耗时更多 预览光线数量是模拟之后可以看到的示意光线(黑线),一般是100~1000,随意设置 点击,开始模拟: (模拟结果) 如果光线太多,则会出现,可以看到剩余时间 照度分析: 分析-照度显示-光栅图表 ...

LeonJin的博客 1万+

SwiftUI混编只如何将您的Objective-C代码迁移到SwiftUI

总览 您可以通过在Swift中替换其中的一些程序来改善其中一个Objective-C应用程序的体系结构,逻辑和性能。互操作性使轻松迁移到Swift的功能集成到Objective-C代码成为可能。您无需一次在Swift中重写整个应用程序。 清理您的代码 通过整理和更新现有的Objective-C代码库,确保Objective-C代码和Swift代码具有最佳兼容性。例如,如果您的代码库中有尚未添加可空性注释的部分,那么现在是时候添加它们了。确保您的代码遵循现代编码惯例,以便与Swift进行更有效的交互。 迁移代

iCloudEnd的博客 2011

8、 使用TPM密钥:从理论到实践的全面指南

本文全面介绍了如何使用TPM(可信平台模块)进行密钥管理,涵盖密钥的创建、存储、加载、迁移以及特殊密钥类型的使用。通过详细的操作步骤和代码示例,帮助读者掌握TPM密钥管理技术,确保系统的安全性和可靠性。

weixin_36212459的博客 242

网易漫画Swift混编实践

\本文为『移动前线』群在4月8日的分享总结整理而成,转载请注明来自『移动开发前线』公众号。\嘉宾介绍\胡波,来自于网易杭州研究院,之前在网易杭研移动应用部参与网易公开课/网易看游戏/网易云阅读/基础组件等产品的开发,目前主要在网易杭研漫画产品部负责网易漫画的iOS端开发。\网易漫画App是网易杭州这边最早采用Swift的产品,今天主要为大家分享下网易漫画App在Swift上的实践。\主要内容:\\...

weixin_33853794的博客 174

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

iOS UMeng OC和Swift混编

在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做示例兼容).

2401_85122999的博客 1020

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

iOS混编实战:OC与Swift互调的核心步骤与避坑指南

本文详细介绍了iOS开发中Objective-C与Swift混编的核心步骤与常见问题解决方案。通过环境配置、双端通信协议、实战示例和典型问题排查,帮助开发者实现OC与Swift的相互调用,提升老项目改造效率。重点讲解了@objc标注、桥接头文件配置等关键技巧,并分享真实项目中的最佳实践。

weixin_29011667的博客 332

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Objective-C迁移Swift

迁移工作提供了一个重访现有Objective-C 代码的机会,也可以通过Swift代码来更好的优化app软件架构,逻辑以及性能。直接一点说,你将用先前学到的“mix and match”和“interoperability”这两个章节来进行增量迁移工作。“Mix-and-match”功能使得选择哪些特性和功能来用Swift来实现,以及哪些依然用Objective-C来实现变得简单。“Interop

王光荣的专栏 1520

iOS学习——Using Swift with Cocoa and Objective-C--在同个工程中使用Swift和在同个工程中

Swift与Objective-C的兼容能力允许你在同一个工程中同时使用两种语言。你可以用这种叫做“mix and match”的特性来开发基于混合语言的应用。使用Swfit的最新特性--“mix and match”,你可以实现应用的一部分功能,并无缝地并入已有的Objective-C的代码中。Swift与Objective-C文件可以在一个工程中并存,不管这个工程原本是基于Objective-...

qq_41597968的博客 235
上一篇: swift里 as、as!、as?区别
下一篇: 3D环境中碰撞检测
Philm_iOS
博客等级 码龄8年 74粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值