OC与Swift混编

    swift强势来袭,想要紧跟脚步,但之前OC的工程推倒重来在时间和实践上都有点伤神,混编就是这个过渡的桥梁,使用混编,快速完成

在OC工程中首次创建swift文件或者swift中首次创建OC文件,都会给出提示是否自动生成一个桥接文件,其实自动生成是两个文件,一个可见一个不可见,但是这两个文件的名称都能在配置文件中找到,在使用之前先看个小实验......

1.使用前需要了解的配置

做个小实验(只用静静看着就好了):

1).target-->buildSetting--(输入packaging)

a.前提条件:工程名字是TimingUsingPickerView

b.Product Module Name 设置成 "imooc"

c.Product Name设置成"imooc1"

d.Defines Module 系统默认是No,此处还是用系统默认的    (这个是经过尝试,设置成Yes 或者No在我目前使用的范围内并没有什么影响,当然个人涉及范围有限,可能有什么未知的影响还没触及,感兴趣可以尝试,欢迎补充~_~)

配置如下:

实验配置如图

2)在OC中创建swift文件 生成桥接文件和隐藏文件:

    target-->buildSetting--(输入swift)

查看文件名

如图,可以看到生成的文件名:

a.桥接文件" TimingUsingPickerView-Bridging-Header.h" 可见的,在工程中可查找到该文件(在swift调用OC文件)

b.imooc-Swift.h不可见,但调用时可像查看系统类的方法查看(在OC中调用swift文件)


经实验发现:

a.无论怎么改变,桥接文件的名字都是跟工程名保持一致.但是该文件是可以单独创建,进行配置的.具体操作步骤:创建一个头文件,然后模仿"工程名-Bridging-Header.h"的形式命名,再查找target-->buildSetting--(输入swift),在Bridging Header中进行设置(一般还是建议使用系统自己创建)

b.生成的不可见文件imooc-Swift.h名字是受Product Module Name影响的.该文件不建议自己创建,所以需要自定义的一定在使用之前先设置好Product Module Name.


2.OC与swift文件的真正混用

实验条件可以忽略,但是为了避免不必要的麻烦,建议看了实验结果再往下走:

1)target-->buildSetting--(输入packaging)-->设置Product Module Name (也可不设置,默认是系统的)


moduleName


2)在OC中首次创建swift或者在swift中首次创建OC,弹出提示,是否创建桥接文件

提示是否创建桥接文件

点击确定,则会生成两个文件:

TimingUsingPickerView-Bridging-Header.h 以工程名命名的桥接文件,可见

imooc-Swift.h 不可见,在target-->buildSetting--(输入swift)进行查看


3)swift与OC的混用

  a.在swift中使用OC的文件

在自动创建的桥接文件TimingUsingPickerView-Bridging-Header.h中,依次导入swift文件中需要使用的类,然后就可以使用了,不过在swift文件中得按swift的规则写了

导入需要的OC文件


 b.在OC中使用swift的文件

在OC中导入系统自动生成的imooc-swift.h文件(不能直接查找到该文件,但是可以像查看系统类的方法点击进入查看) ,就可以使用创建的swift文件,"...-swift.h"/"...-Swift.h"都可以

导入系统创建的文件


3.swift调用OC中的一些坑

OC 中宏定义 如果只是值类型等简单的宏定义,swift也可直接调用,但是如果是比较复杂的方法,swift就只能呵呵了,这个时间建议创建方法可以使用swift中的延展extension

1)swift中简单宏使用如:

OC中简单宏定义
swift中调用简单宏


2)swift中不能使用OC中复杂的宏如:

OC中复杂的宏

当不能使用的时候,就需要写成方法供swift使用,可以创建一个swift文件,然后添加需要的延展,如下图:

UIColor的延展
swift方法中方法的调用


3)创建的swift类,必须继承自NSObject或者NSObject的派生类,否则编译后不会生成对应的转换类,接下来验证一下(此处感谢  @小杰杰杰提示😊)

a.首先创建一个Person类,不继承NSObject

未继承NSObject的Person类


在OC中TestViewController.m中使用,记得引入"工程名-swift.h",出现如下图的提示,此处按住"command"键,点击Person,进入到刚刚创建的Person类(见上图)

OC中使用未继承NSObject的Person类(swift编写)


b.现在修改原来的Person类,继承NSObject,如下图,修改后要"command+B"编译一下才能看到变化

继承NSObject的Person类


同样在OC中TestViewController.m中使用,记得引入"工程名-swift.h",未报错,如下图:

OC中使用继承NSObject的Person类(swift编写)


此时,按住"command",点击Person进入,此处有惊喜,如下图:

swift编写的Person类对应的转换类.可以互相调用,玄机就在这里❗️

4)创建的swift类中,写了一个枚举,不继承NSObject,此时定义一个该枚举类型的变量,发现桥接文件中没有生成相应的属性,解决办法:定义枚举时需要手动添加添加@objc,如下:

swift中定义枚举类型的变量


看来使用OC与swift混编还是有点限制的,使用时需谨慎,不过,这些也已经够平时使用了


小结:swift和OC混用,坑还是很多的,埋坑是个体力活,常运动是个好习惯...

以上仅是个人使用总结,欢迎批评指正补充~~~~~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 197,000评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,825评论 2 374
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 144,055评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,766评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,639评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,453评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,860评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,492评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,783评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,817评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,624评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,439评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,872评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,075评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,372评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,868评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,075评论 2 338

推荐阅读更多精彩内容

  • OC中使用Swift 1、在项目中右键添加一个 Swift 文件,如TestSwift.swift。 2、添加后 ...
    刺客辣条阅读 2,241评论 3 11
  • OC与swift混编 前言 苹果推出swift已经两年多了,到今年的九月份正式发布了swift的3.0版本,相信很...
    wentianen阅读 728评论 0 5
  • iOS开发中有时候不可避免的会使用到OC和Swift的混编,这时候就需要建立桥接文件连接不同语言的类库 最近项目中...
    丶Destinyxl阅读 15,633评论 16 27
  • 终于知道自己的拖延症有多严重了,不到最后的关键时刻总是会像寒号鸟一般…不想当厨师的将军不是好士兵!我的斜杠人生拉开...
    卿秀阅读 405评论 1 5
  • 喜欢大雨的肆无忌惮, 人性也需要来一次痛快淋漓的涤荡! 让暴风雨来的更猛烈些吧, 我们这一代!
    知未了阅读 255评论 0 3