通过公司项目谈谈Swift & Kotlin

前言


公司的项目,历时不到3个月完成后台服务+Android+IOS的开发。项目其实不大,主要是自己不想做重复造轮子的工作,所以这次项目开发采用了 kotlin1.0 和 swift 3.0的开发。由于两种语言的语法格式比较接近,所以刚开始动手之前,我在一直在设想能否一套代码『基本上』可以共用。通过项目的实践这个设想是成立的。由于IOS我好久没写,swift的语法也忘的一干二净,也没有封装的东西,都是现写,所以写IOS还是花费了1个多月。

通过公司项目谈谈Swift & Kotlin_第1张图片
公司项目截图

为什么选择kotlin & Swift


我是被它们的语法糖吸引。在没有做这个项目之前。我安卓是自己封装的框架,用的是 retrofit+rxjava+dagger2+data binding,代码其实已经很精简(如下)。

通过公司项目谈谈Swift & Kotlin_第2张图片
Paste_Image.png

但是还是没有打动我,最主要的就是大量的xml布局文件,大量的适配文件充实着整个项目,我写的太烦了。 要知道从xml -> 代码又需要大量控件初始化。

从去年开始我的开发思路已经发生改变,简单粗暴(越少的代码 实现越多的功能)是我追求的方向。于是kotlin和swift就成了我写项目的语言。精简的语法糖和函数式编程思路让我很有成就感。值得一提的是,我公司的项目 安卓只写了4800行代码,IOS写了6500行代码,即完成工作。 写代码的时候我经常提醒自己:一行代码就是一个脑细胞换来的,写的越少,coding速度越快,改bug的效率也越高。

界面布局开发


安卓和ios的界面布局开发的方式有多种,最终都是转化为代码。我的布局开发也是采用纯代码。不同的是我利用尾随闭包的特性封装成dsl的风格。
IOS布局代码我抛弃了所有的具体数值,在我的概念里面 我看不出来某个控件用多少像素,我就知道大约有那么大。代码截图如下:

通过公司项目谈谈Swift & Kotlin_第3张图片
安卓的TextView的代码,不需要实例化控件即可完成事件
通过公司项目谈谈Swift & Kotlin_第4张图片
IOS的UILabel的实现

IOS的控件点击事件,我封装成了onClick(click:()->Void),不再需要@selector代码跳来跳去。
控件的大小,字体大小,margin和padding都采用相对的方式。确保代码的适配性是一致的。

界面的调整和传值


基本上都是利用语法糖做了封装,如下截图:

通过公司项目谈谈Swift & Kotlin_第5张图片
IOS的界面调整和传值,如截图,传了3个参数
这是安卓的界面调整和传值

业务逻辑层


业务层基本就是做数据处理,采用接口+实现类的方式。Android我用java的proxy实现了面向切面编程,例如我下面截图,在做这个方法前会调用beforeLog和userCheck的方法,通过异常的方式来传递拦截结果

Paste_Image.png

IOS没有实现这样的功能,基本上还是常规的写法,代码也写垃圾

通过公司项目谈谈Swift & Kotlin_第6张图片
Paste_Image.png

依赖注入


抛弃了之前用第三方注入的方式。采用接口+扩展的方式实现业务操作Dao和宿主的解耦 (这个方式是看Anko的源码有感 )
具体做法就是,定义一个接口,安卓给接口 扩展一个dao操作对象,这样实现类都可以调用这个dao。ios是给接口添加一个默认实现,这样你懂的

网络请求


安卓采用了retrofit ,IOS用了AlamoFire,网络数据传递 还是采用我之前写的文章那样,通过滚雪球的方式一直抛给界面层处理。

就写那么多吧,后面具体的细节,我在写出来。

你可能感兴趣的:(通过公司项目谈谈Swift & Kotlin)