Swift ObjC转Swift

Swift ObjC转Swift

历史

swift1.0

Swift1.0,2014年苹果发布的全新语言,在刚发布的时候,最让我记忆深刻的是,几天时间就有人用swift写了当时非常火的游戏1024。从1.0版本开始,最初我只是对iOS又出新语言的一种好奇心,只是初略看了一些基础的语法,问题也是非常多多,记得让我头疼的是一个swift项目中只要包含一个中文,在写代码时就不会出来相应的代码提示,可想而知当时如果用swift写应用是多么一键恼火的事情,不过,自己还是坚持死磕到底写了一个简单的登录注册界面,也没有在实际的项目中使用,在swift最初发展阶段,使用起来不是很方便,文档与资料不多,github中关于swift的第三方库也不多。

swift2.0

swift2.0时代,swift语法上变化了很多,其核心是面向协议编程,经历1年多的发展,github上swift的第三方库增加了很多,于是我也开始用swift写点实际的项目,第一个swift项目peve,在用swift写项目的时候,也有让人恼火的坑,比如一个swift工程文件超过了3000多行,代码提示以及速度都非常的慢(当时的电脑配置可是mac book pro 高配),有时候代码根本没有高亮,不过整体写下来之后的感觉,总体来说代码上比objc少很多,看起来舒服很多(ps:我们这里就不讨论swift底层还是用的objc库,在编译ipa的时候会多一部分动态库链接objc库,但是总体来是也大不了多少M)。

swift3.0

swift3.0,刚出来的时候,让我头疼的以前swift2.0的代码要转swift3.0有会花很大的时间和精力。but,从这次swift2.0到3.0的过程中,居然只花费了我1天的时间就过度到3.0了,在刚刚发布的4小时内,强大的Alamofire(同于objcAFNetwork)的网络请求框架,就已经支持Xcode8.0GM版本swift3.0,同时其他第三方框架更新也是非常迅速就支持了swift3.0,swift3.0比起以前,语法上简单大方,代码语义上更加精确。同时改动也有点点大。虽然有一些地方不足(我在实际项目中编译GPUImage2时,只要我一改动一点代码,编译就会耗上我5-10分钟时间,感觉编译器有点傻,居然没有增量编译,这一点有点让我傻眼)。相信在以后swift会越变越好。

ObjC什么时候转Swift

从ObjC开始学习的,从Swift的发展来看,2016年8月最新的语言使用情况,Swift的使用排名已经超过了ObjC,现在国外越来越多的公司也已经把Swift作为开发了,但是国内的话比较慢,而相对于一些大企业大公司,现在基本都还是在用ObjC,一些老的迭代代码也基本都是用ObjC写的。如果用Swift,初始界面学习适应Swift语言肯定耗时,必须一天的工作任务,可能2-3天才能完成,开发进度肯定会比以前慢,大大加大开发成本。但是,这些只是最初阶段,swift以后发展也会越来越好,如果你们公司的应用没有做SDK需求且必须支持iOS7.0以上,那么你完全可以用Swift来开发了,我认为以后Swift必将取代ObjC,虽然前期可能辛苦一点,只要去做,也不一样有那么想象中的那么艰难。

1
2
3
4
// old code (Swift 2.2)
let content = text.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
// new code (Swift 3.0)
let content2 = text.trimmingCharacters(in: .newlines)

ObjC与Swift之间如何相互调用

现在要用Swift写应用,基本上不可能存在纯Swift开发,如果你做SDK可以用Swift,但是swift制作SDK只支持iOS8以后,iOS7Swift不支持编译成静态库,iOS8以后的所有Framework打包出来都是以动态库的形式加载。

  1. Swift用XX-Bridging-header.h连接所有你可以在Swift调用ObjC的类
    截图
    截图
  2. 在ObjC中调用Swift的类,只需要在ObjC中#import “XX-Swift.h”文件即可(XX为你的项目名)
    截图