文档章节

Swift 与 OC 混编

勇无畏智无惧
 勇无畏智无惧
发布于 2017/03/28 16:24
字数 816
阅读 34
收藏 0

自从swfit 出来之后,swift 开发就正式提上了日程,因swift 目前的版本不够稳定,但也有很多公司已经正式进入了swift 开发,可swift 是一门新出来的语言,有很多已经在OC当中常用的第三方库,还是用的OC语言,不能够和swift 很好的兼容,遇到这种问题,我们今天提供了一种解决方法——混编(hybrid).

1.Object-C bridging-header

Object-C bridging-header 是OC和swift 的桥接文件,该文件的作用是在swift 文件汇总可以使用OC文件中声明(和实现)的变量.常量.类.函数和方法等.

使用:在创建工程的过程中,我们会选择语言(swift or oc),创建好工程之后,如果我们使用与之前选中语言不同的语言来新建一个类,那么会给出一个提示,来提示你创建 bridging-header 文件:

我们选中 “Create Bridging Header”按钮,便会在我们创建swift 文件成功的同时,创建桥接(bridging header )文件.桥接文件名称默认为:”工程名”+”-Bridging-Header.h"

打开创建好的桥接文件,我们可以看到:

很明显就可以看到这个文件就是用来引入文件到swift 中的.

1)想要在swift 中引用OC文件,直接在这里导入OC头文件就可以了,导入方式和OC文件的相互导入一样.如下:

这样就可以在swift文件中来调用导入的类了:

2)如果我们想要给bridging-header 文件重命名或者修改它的路径,可以在Build Setting 中进行设置,Object-C Briding Header 文件路径是相对路径,我们可以直接在这里对这个路径进行修改,修改为新的路径就可以了.

2.Swift.h 

swift.h是指swift 模块的头文件,它的作用是在OC文件中你可以使用swift 中声明的变量.常量.类等.

在创建成功桥接文件之后,Command + B之后,就会自动生成swift.h文件,并不需要我们手动创建,在任意OC的类中,导入swift.h文件,那么就可以使用swift 类中的内容了.

swift.h 文件是自动生成的,不需要手动创建,这个文件的内容也不需要手动管理,在每次Build 工程时都会更新.其中swift 文件中使用public 修饰的类(必须继承NSObject)和方法,都可以在OC中直接使用.

swift.h文件名格式为:”工程名”+”-swift.h”.注意如果工程名中存在空格” "或者中划线”-“,需要用下划线”_”来代替.

 

注:混合开发会遇到的问题:

1)OC NSMutableArrray 与 swift Array

在swift 中使用OC类的方法时,有些参数会是NSMutableArray 的类型,swift 中创建的Array与其他类型不一致,此时需要进行类型转换,swift 编译器会直接报错:Cannot convert value of type '[SwiftClass]' to expected argument type 'NSMutableArray

解决方法:先将Swift 中的Array对象转换成NSArray,然后再将NSArray 转换成NSMutableArray. 

2)字符串长度

在OC中的NSString对象会有lenth 属性来获取字符串长度,swift 中可以用characters.count 来代替.

 

 

引用:http://blog.csdn.net/andanlan/article/details/52665479

 

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

勇无畏智无惧
粉丝 0
博文 3
码字总数 1899
作品 0
石景山
私信 提问
Swift 4迁移总结:喜忧参半,新的起点

这次Swift 3 到 4 的迁移代码要改动的地方比较少,花了一个下午的时间就完成了迁移。Swift 把原来 4.0 的目标从 ABI 稳定改为了源码兼容,此次代码的兼容性做的确实很好,这个目标算是达到了...

没故事的卓同学
2017/09/30
0
0
Swift引入Header.h文件

新天开始写swift的第一个项目,一开始创建工程时就遇到问题,在xcode6出来之后,pch文件被删除。 首先先穿件一个pch文件。 按照原来的oc方法, 在swift中发现,同样的方法怎么都都引用不到p...

SoulJa
2015/10/25
2.1K
0
Swift实际开发中遇到的小问题

从上周开始, 正式使用Swift语言进行实际项目的开发, 虽然之前Swift的语法已经了解过, 并且写过几个简单的小Demo, 但是在实际应用到了公司项目中还是遇到了一些小问题. 主要是Swift与OC语法对...

Sunxb
2016/12/02
0
0
Swift 和 OC 混编

Swift 中调用OC很简单: XXX-Bridging-Header.h 中 引入需要访问的 OC 的头文件即可 但是OC调 Swift 需要注意: #import "TestDemo-Swift.h" // ProductName-Swift.h 注意 ProductName 不能包......

TaciturnKnightYQ
2015/12/07
119
0
Swift与OC混编

一:在swift中引用oc文件 (1)在swift工程成创建oc文件,系统自动生成桥接文件 然后再在targets->build settings ->Object-C Bridging Header 设为哪个桥接的头文件即可。 或者自己建一个....

上官尘
2016/03/08
133
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
312
5
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
10
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部