OC项目中使用swift混编

1.背景

  外包项目(OC)交接完毕,需要把另一个swift的项目的部分(很多)页面加入到这个外包项目中。有两种解决方案

一、将swift的代码变成OC的代码,即照着swift的代码写成OC的代码(呵呵了,写了两星期,放弃主要是没服务器接口也没法调试,总不能开着青花瓷模拟数据吧,自己也懒得写模拟数据,天知道OC要写多少个@,)

二、OC与Swift混编(可能会有坑,但是比较简单,一劳永逸),那就接下来踩坑吧!

2.OC与swift混编坑

1.引入 文件名-Bridging-Header.h 桥接文件

       创建swift文件的时候会有提示,也可以自己创建,具体可参照iOS开发之OC与Swift混编,这一步没有什么问题。

2.import 问题

原来的开始引入swift项目中的文件,发现#import <MagicalRecord/MagicalRecord.h> 等引入的头文件报错,百度之后了解需要改成#import "MagicalRecord/MagicalRecord.h" ,不能使用<>的形式,搜索代码将<>的形式改成“”,系统的不用改,cocopods的里面的也不用改。

3.cocopods引用swift三方库

swfit项目中有用到了一些三方库,

如Snapkit,如果直接在podfile里面写的话会有问题,这时候需要了解useFrameworks,不绕弯子,直接贴答案Podfile中的 use_frameworks!

直接给结论:

纯swift项目中使用cocopods ,PodFile必须使用 use_frameworks!

纯oc项目中默认使用 #use_frameworks!

swift+oc中使用  #use_frameworks! 

oc+swift项目中,老老实实的把三方库文件拽到项目里来吧。如下:

4.项目某个.h文件报错

 貌似是引入swift项目之后编译比较严格了,我的报错文件里提示我少属性或者方法,但是我查到那个文件是是不缺少的,这就尴尬了,我相信xcode是不会骗我的,我的眼睛也不会骗我的,那么真相只有一个,在这个项目下有可能有两个相同的名称的文件,这两个文件由于删除的时候只是移除了依赖,并没有删除掉,在没有引入swift之前编译不严格,所以没有问题,引入swift之后,编译严格了所以把它引入了。

打开Finder在项目下搜索报错的文件名,果然有数个一样的,删掉错误的之后,果然就好了,当然有好几个相同的文件,统统删掉,编译,succeed!nice!

总结:混编之前代码先备份!备份!备份!



use_frameworks!原文:

A、用cocoapods 导入swift 框架 到 swift项目和OC项目都必须要 use_frameworks!

B、使用 dynamic frameworks,必须要在Podfile文件中添加 use_frameworks!

(1)如果在Podfile文件里不使用use_frameworks! 则是会生成相应的.a文件(静态链接库),通过staticlibraries这个方式来管理pod的代码。  (2)Linked:libPods-xxx.a包含了其它用pod导入的第三方框架的.a文件。(3)如果使用了use_frameworks! 则cocoapods会生成相应的.frameworks文件(动态链接库:实际内容为Header+ 动态链接库 + 资源文件),使用dynamicframeworks来取代staticlibraries方式。  (4)Linked:Pods_xxx.framework包含了其它用pod导入的第三方框架的.framework文件。

use_frameworks! -> dynamic frameworks 方式 -> .framework

#use_frameworks! -> static libraries 方式 -> .a

关于Library 和 Framework 可以参考:

http://blog.lanvige.com/2015/...

(1)swift项目cocoapods 默认 use_frameworks!(2)OC项目cocoapods 默认 #use_frameworks!

用cocoapods导入OC框架到swift项目:

(1)#use_frameworks! 必须创建头文件,在头文件里面 #import "AFNetworking.h"

(2)use_frameworks! 如果有头文件,在头文件里面 #import "AFNetworking/AFNetworking.h",其它swift文件中用到不需要再import;如果没有头文件,则在每个需要用到的swift文件里 import AFNetworking。

用cocoapods导入swift框架到swift项目:

(1)必须use_frameworks!

(2)不需要头文件,在需要用到框架的swift文件里 import Alamofire

用cocoapods导入OC框架到OC项目:

(1)#use_frameworks! 在需要用到的文件里 #import "AFNetworking.h";也可以通过pch文件,用法类似swift中的头文件。

(2)use_frameworks! 与(1)类似,用法上没有区别。

用cocoapods导入swift框架到OC项目:不考虑

总结:

(1)用swift项目考虑到会使用 OC 和 swift 两种第三方框架,所以Podfile中使用swift项目默认的 use_frameworks! 更为妥当,并且frameworks动态链接库具有一定的优势。

(2)可以建立一个Bridge头文件,用来import那些OC框架的.h文件:#import "xxx/xxx.h"。或者不建头文件,像swift框架一样,直接在需要用到的swift文件中import。

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

推荐阅读更多精彩内容