美文网首页kotlin频道
通过公司项目谈谈Swift & Kotlin

通过公司项目谈谈Swift & Kotlin

作者: 747a945a4501 | 来源:发表于2016-11-28 15:07 被阅读1158次

    前言


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

    公司项目截图

    为什么选择kotlin & Swift


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

    Paste_Image.png

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

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

    界面布局开发


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

    安卓的TextView的代码,不需要实例化控件即可完成事件 IOS的UILabel的实现

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

    界面的调整和传值


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

    IOS的界面调整和传值,如截图,传了3个参数 这是安卓的界面调整和传值

    业务逻辑层


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

    Paste_Image.png

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

    Paste_Image.png

    依赖注入


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

    网络请求


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

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

    相关文章

      网友评论

      • 西叶lv:OC和Java都搞??
      • deep_sadness:楼主厉害!能写写自己封装的这个ios库吗?感觉很有趣。:grin: :+1:
      • uranusjr:想請問在 iOS 上用的 UI 封裝是什麼庫?之前用了 Anko 覺得實在太合理,但在 iOS 完全找不到類似的工具。
        西叶lv:OC版适配用Masonry,Swift版用Snpkit
        uranusjr:@维少 原來如此,難怪從來沒看過類似的。這個專案有計畫發布嗎?一直很有興趣嘗試類似的庫,但沒有時間實作需要的基礎系統,很希望看到 iOS 有這類環境。
        747a945a4501:是我自己封装的一套,仿anko的方式,有LinearLayout 相对布局等等

      本文标题:通过公司项目谈谈Swift & Kotlin

      本文链接:https://www.haomeiwen.com/subject/qejopttx.html