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在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都需要设置一次,如下:
这里几点需要注意的:
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
如下图:
四、OC引用Swift的framework:
配置方法跟pod配置版本号方法相同,设置完版本号后在需要的文件中引用:#import <framework/framework-Swift.h>
】也可以通过引入模块的方式:@import framework;
这两种方式效果相同。
注意:很多swift三方库,并不支持OC使用,而绝大部分OC库支持swift,是向下兼容的,OC与Swift混编的注意事项,稍后补充。
ps:文章有点啰嗦,本人系新手,主要是记录给自己看。
- Swift与OC混合使用
- OC与Swift混合使用
- Swift与OC混合编译
- Swift与OC混合编程(一)
- Swift与OC混合编程(二)
- Swift与OC,C++混合编程
- OC与Swift混合开发技巧
- swift oc 混合编程
- OC 与Swift混合开发之相互调用
- OC与Swift混合开发(混编)图文教程
- OC与Swift混编之Swift中使用OC
- Swift和OC混合编程
- Swift、OC、C++混合编程
- 关于swift与objective-c混合使用
- 关于swift与objective-c混合使用
- swift 和 OC 混合编译的问题
- OC,Swift混合编程,包含String参数
- swift和oc混合编程总结
- [PAT-甲级]1006.Sign In and Sign Out
- Fragment全解析系列(一):那些年踩过的坑
- Java面试基础——持续更新
- SRM556 Div1Medium LeftRightDigitsGame2
- unsigned和signed的个人体会
- OC与Swift混合使用
- FreeMarker的List的使用
- tomcat报错信息:严重: StandardServer.await: create[8005]:
- h264基本介绍
- UVA 822
- Spring中定时器实现
- Java异常处理机制的简单原理和应用
- HighCharts使用
- [PAT-甲级]1007.Maximum Subsequence Sum