OC与Swift混合使用

来源:互联网 发布:美工刀片的硬度 编辑:程序博客网 时间:2024/06/05 22:48

随着swift趋向于稳定,越来越多的公司启动的新项目也想使用swift过把瘾,使用swift的好处与弊端不再赘述。目前版本是swift3.0,而且Xcode9beta版中已经更新到swift4.0。使用swift开发是大趋势,这里从以下几个方面看一下如何进行简单的配置。

  • OC中引用Swift文件
  • Swift中引用OC文件,以及第三方库
  • Xcode8以后编译swift2.x
  • OC引用Swift第三方库

一、OC中如何引用Swift文件:
首先先来创建一个object-c语言的项目,然后直接一个swift类,这时会弹出如下提示:
配置桥接头文件
先选择Do not Create,稍后会提到,系统会自动创建一个格式:xxx项目名-Swift.h的头文件,不显示但是可以直接引用,直接引用,这时发现报错了。
报错了
这是为什么呢?虽然一般情况下是直接引用xxx项目名-Swift.h,真正需要引用的是Product Moudle Name对应的文件名:
模块名配置
也可在此基础上搜索swift,对应的文件名正是想要的文件名,为什么上面还要提搜索pack找Product Moudle Name直接搜swift不就好了吗?因为这个名字是拼出来的:Product Moudle Name-Swift.h,可以去pack里面删除Product Moudle Name对应的内容,再回来搜swift看一下就明白了。
搜索swift
项目在创建的时候名称有的时候可能有歧义系统自动帮我们修改。swift在OC项目中是作为Moudle来使用的,名称继承自PROJECT下的Product Moudle Name,导入时报错请自行检查是否匹配。
目前为止导入头文件成功了,调用一下SwiftTest类中的log方法。
方法配置
却发现一直报未定义该类的错误:
未定义报错
点击生成的项目名-Swift.h的头文件里面却发现没有关于Swift声明:
未声明该类
后来经过查找发现是因为没有创建桥接文件导致的,手动来创建一下桥接文件,命名规则:项目名-Bridging-Header。
创建桥接文件
到项目里手动配置文件路径:
配置方法
配置完成后clean然后build点击项目名-Swift.h进入就可以发现定义swift类的声明,Command + R 运行成功。
二、Swift中引用OC文件,以及第三方库
swift引用OC文件比较简单:
1)创建桥接文件(参考上面步骤)
2)把需要用到类或者第三方SD、framework头文件引入
3)直接在swift文件中使用
由于比较简单不在赘述,稍后会提到注意事项。
三、Xcode8以后编译swift2.x以及pod引用的swift框架
Xcode8以后swift的currentVersion改为3.0,如果是swift2.x项目打开往往会有这样的提示:
转换提示
如果你想转换的直接点击convert,但是要注意备份小心一万点爆红,如果点击了later之后又想转换了可以进行如下操作:
手动转换
如果想要继续编译swift2.x需要设置版本:
设置版本
如果没有使用第三方框架那么现在就可以build了,而且是成功的,但是如果使用了第三方的framework,那么每个framework都需要设置一次,如下:
设置pod的版本
这里几点需要注意的:
1)pod里面的framework的版本必须与taget里面的一致否则编译失败。
2)必须与最低版本一致有一个framework使用了swift2.x其他都必须设置为YES
3)任何时候点击convertToCurrentVersion都是转换到最新版本也就是当前的swift3.0,即使你设置了使用以前版本再次进行转换也是转换到swift3.0不会转换到以前版本。
4)每次pod以后之前的配置都会重置,需要从新设置版本。但是可以在Podfile里面加入如下代码,将会对所有提交的framework进行设置:

post_install do |installer|  installer.pods_project.targets.each do |target|  target.build_configurations.each do |config|  config.build_settings['SWIFT_VERSION'] = '3.0'  end endend

如下图:
pod设置
四、OC引用Swift的framework:
配置方法跟pod配置版本号方法相同,设置完版本号后在需要的文件中引用:#import <framework/framework-Swift.h>】也可以通过引入模块的方式:@import framework;这两种方式效果相同。
注意:很多swift三方库,并不支持OC使用,而绝大部分OC库支持swift,是向下兼容的,OC与Swift混编的注意事项,稍后补充。
ps:文章有点啰嗦,本人系新手,主要是记录给自己看。

原创粉丝点击