sqlite从Java/Android到斯维夫特 iOS开发:语言与框架比较

本文是自作者在『移动前线』微信群201六年6月二十六日的享受总计整理。
笔者从二〇〇八年开首做Android开发,初叶接触斯维夫特是在201四年终,当时组里曾经做过2个德姆o
App,感觉技术还不够成熟未有正规通知。201陆年终我们规范使用swift开发上线了销售帮手App产品,积累了相比较丰硕的swift项目实战经验,开源框架都以用的swift版本,大批量选用了面向协议和函数式编制程序。iOS
App开发职员基本都以先前安卓版本的开发职员,同时保证安卓和iOS
1个版本,功用很高。
今天享受的主旨是Java/Android开发职员怎么着快捷上手斯威夫特iOS开发。首要内容如下:

  1. WhyFrom Java/Android to Swift
  2. Swift语言为何值得学习?
  3. Javavs 斯维夫特语法相比较
  4. Android和iOS UI开发比较
  5. Androidvs Swift iOS框架相比
  6. 开发工具相比较

1、Why FromJava/Android to Swift

资本和频率

是因为当下同业务的Android和iOS
App产品功用雷同,由2个团队开发能够下落业务同步和挂钩开支,制止安卓和iOS多个集体带来的制品功能差距和联络开支。

斯维夫特语法更近乎Java,相对Objective
C上手不难,作者2012年早就带过iOS项目,学过oc,因为不能够忍受oc奇怪的语法最终放任了,但此次学习swift
iOS进程还是挺顺遂的,学习的首要性门槛反而是Xcode IB的应用。

Why not React Native?

ReactNative大家也重要项目目在用。但XC90N思想和语法的求学曲线有个别陡,很多有Web开发经历的人都不自然喜欢。其它很多安卓开发者并从未读书过js,学习React
Native开支会比较高。学习React
Native最后依旧要对原生开发有一定的问询。最终,在一部分成效复杂的App,React
Native用户体验不比原生 。

Why not HTML5 Hybrid App?

用户体验不够好,对于不熟知Web开发的工程师学习费用比较高。
201四年我们用ionic框架做过混合App,在iOS上效果可以,但在安卓低端机上相比较卡,影响用户体验。

2、Swift语言为啥值得学习?

斯维夫特是后天Apple主推的语言,201肆年新生产的言语,比Scala等“新”语言还要年轻九周岁。20一伍年秋已经开源。最近在linux上可用,近日曾经支撑Android
NDK;在树莓派上有SwiftyGPIO库,能够由此GPIO控制1些硬件。
ObjectC is old and ugly,oc是1九8三年苹果推出的,过于陈旧和臃肿。
Swift语法类似Scala,Javascript ES六, Java,OC, C++,
Python,这几个本身是遵照语法相似度排序的。
Swift扶助多范式编制程序:面向协议,面向对象和函数式编程 。
最后,大家还足以因而Swift学习函数式编制程序思想,那块Java八才支撑。

三、Java vs. 斯维夫特语法相比较

  • 基础语法
  • 函数
  • struct和class
  • Enum
  • Interface vsProtocol
  • MultiThread

三.壹基础语法

Java Swift
static final 常量 var 变量,let常量
Java语言没有,Guava库提供 可选型Optional,通过if let解包
Java支持自增++,自减— Swift不建议使用,3.0版本将不支持自增
逻辑控制和C基本一致 逻辑控制语句更现代
Java有main方法 Swift没有main方法
Java需要;做行结束符 Swift不需要行结束符

斯维夫特的switch
语法和Java及C++很像,可是它从未break,他命中四个case后会自动退出switch。对于多少个不等case同样处理的情景,能够case后边三番五次多少个condition,用逗号隔绝。
for循环和Java也基本雷同,然则也是不需求括号。for循环中,..<的用法相比便利。下划线符号_(替代循环中的变量)能够忽视具体的值,并且不提供循环遍历时对值的拜访。for-in则有点类似与Java中for
each循环。
Swift 2.2中trycatch和do while和java差距非常的大

三.2 函数和闭包

斯维夫特函数的定义和Java很不等同,斯维夫特函数的定义形如 func foo(arg: Type)
->Return Type:
斯维夫特中等校园函授数是一等平民,能够当作重返值和参数;Swift支持闭包,Java八才支撑lambda闭包。
斯威夫特别支部持元组,Swift函数能够经过再次来到元组补助四个再次来到值。
Swift函数能够嵌套,即1个函数内部还足以定义函数,Java不援助。
斯威夫特函数能够接收不定参数,跟Java基本类似
Swift函数参数可以带默许值,和Python类似,Java函数不得以涵盖暗许值。
常用的函数式编制程序方法map,reduce,
flatMap,filter,sort,相对于明白抽象的函数式编制程序概念,作者以为始于时先用好这几个函数更要紧。

3.3 struct vs. class

struct是值类,class是援引类型,Java语言未有struct,但c/c++/c#言语都有。
Swift开发推荐使用struct,而不是class。Swift语言达成包罗几百个struct,唯有多少个class。
Swift类构造方法是init(),析构方法是deinit(),类格局调用跟Java基本壹样。
self也正是Java中的this,传入生命周期不均等的闭包时索要申明为weak。

3.4 Enum枚举

Android开发谷歌(谷歌(Google))官方不提议选拔Enum,影响属性。
斯威夫特的Enum和Java类似,本质是一个类,里面能够分包函数。
斯维夫特Enum语法更简明。
斯威夫特Enum协助扩张extension。

3.5 Interface vs. Protocol

**Java Interface ** Swift Protocol
可以继承 可以继承
Interface不能带有具体实现的方法,Java8以后才可以 protocol可以带有具体实现的方法
implements extension更强大

Extension扩充就是向一个已有的类、结构体或枚举类型添加新功用(functionality)。那包涵在未曾权限获取原始源代码的情形下增添类型的能力(即逆向建立模型)。扩大和
Objective-C 中的分类(categories)类似。
斯维夫特 中的增加可以:

  • 添加计算型属性和计量静态属性
  • 概念实例方法和连串方法
  • 提供新的构造器
  • 概念下标
  • 概念和使用新的嵌套类型
  • 使二个已有品种符合有些接口
    亟需留意的是扩张方法的作用域难点,那里不展开斟酌。

3.6 MultiThread多线程

Java Android Swift iOS
Thread,Runnable NSThread
Java 5 Concurrency包 GCD
Android多线程扩展 NSOperation,NSOperationQueue
AsyncTask,Looper,HandleThread,IntentService…

iOS的二十四线程相对Java来说比较不难,GCD一天时间基本就能够弄精晓。Java的Concurrency包就相比较复杂了。

4、Android,iOS UI开发相比

Java Android Swift iOS
Xml layout布局 Xib & StoryBoard
直接写xml代码,可视化辅助开发 AutoLayout和SizeClass,IB自动生成,代码合并困难;
Android可以用Java添加和实现view 很多团队只好用代码实现UI界面
Intent页面跳转 Segue连线跳转
Java自定义view,可以在Activity和layout中使用,可视化支持不够好 自定义View可以使用IBDesignable & runtime attributes

iOS开发苹果官方提议采纳Storyboard开发UI,好处是比较直观,通过看界面能够更好的领悟和维护App。今后Xcode七版本对AutoLayout和SizeClasses的支撑尤其好,多分辨率适配变得简单,提议我们扬弃选用frame代码写界面的思想意识做法。
理所当然,Storyboard也有上面包车型客车流弊:
界面重要依靠IB生成,Xib代码难以保险,Xcode打开Storyboard或Xib就会对文本发出修改,即便大家一向不做实在的修改,git也会呈现文件修改了。
五人支持,同时修改导致争论,合并困难。
Storyboard中带有页面多了后会占用了太多内存,导致Xcode卡顿和崩溃。
似是而非定位困难,错误提醒不清楚,新手难以稳定错误。例如十分的大心删掉了IBOutlet会很难定位。

Storyboard UI 开发执行

遵从工作模块分成多少个Storyboard,每人背负的模块制止交叉。
各种storyboard不要跨越十三个页面,能够经过Refactor
Storyboard效率重新划分。
用Container在一个storyboard复用UI模块,用xib在多个storyboard复用UI模块。
复杂的输入表单,提议用斯威夫特yForm框架写代码。

伍、Android vs 斯维夫特 iOS框架相比

Swift框架将来早已重重了,Swift也能够接纳OC开源框架,但不推荐使用。我们注重比较介绍项目常用的互连网请求框架,JSON解析和图片缓存框架

sqlite,网络请求框架

Java Android Swift iOS
Retrofit Moya
OKHTTP Alamofire
Volley AFNetworking
Retrofit + RxAndroid Moya + RxSwift

在Android开发未来相似选拔OKHTTP,Retrofit和Volley等网络框架进行付出,iOS开发oc时代使用AFNetworking库开发,swift开发推荐使用Alamofire和Moya库。
Moya对Alamofire网络请求库开始展览了打包,开发不供给写互联网模型,管理等。使代码特别简洁。Moya可以代表本身编辑的网络抽象层APIManager。Moya提供了有的很好的性情:
编写翻译期检查API接口调用的正确性
通过enum枚举类型清晰的定义分歧API的接口
把接口测试stub作为一等公民,让单元测试变得一点也不细略。
支持ReactiveX扩展,方便和RxSwift集成。

近日App基本都是应用JSON作为报中华全国文艺界抗敌组织议,Android开发我们1般接纳Gson实行剖析,在Swift开发中,比较了ObjectMapper,Argo+Curry,SwiftyJson后,大家*
决定利用ObjectMapper作为JSON解析框架。ObjectMapper协助的性情如下:

  • 协理把对象转换到JSON,把JSON转换到类对象
  • 支撑嵌套的目的(单一对象,对象列表集合和字典)
  • 帮忙自定义的变换函数
  • 援助组织体struct
  • 支持Realm和Alamofire集成,AlamofireObjectMapper
    使用例子:

let user = Mapper<User>().map(JSONString)
let JSONString = Mapper().toJSONString(user, prettyPrint: true)

Realm是iOS开发相比较盛行的指向移动端设计的数据库,代替sqlite,也有Android版本
图形缓存框架,Android开发常用Glide和Fresco,OC开发一般用SDWebImage,Swift开发推荐用Haneke斯威夫特。

6、开发工具比较

Android近日主流的开发工具是Android Studio,201肆年从前是Eclipse ADT。

iOS开发间接使用Xcode。对于Java/Android开发职员来说,Xcode上手较难,特别是Interface
Builder,Xib和视图代码直接通过连线来扭转事件措施,相比挑衅开发习惯,并且出现难题一定困难。而Android开发者习惯手写xml界面代码。

与Android Studio相比,Xcode速度快,但不够稳定,壹天崩溃三回很健康。

模拟器方面,Android的Emulator是虚拟机,运行和设置速度比较慢,iOS是Simulator,速度快,但有个别功力不可能模拟。都推荐应用真机实行付出。

包管理器&创设筑工程具相比较

Android开发早期用Ant做一些职务处理,前面有个别团队借鉴Java
EE项指标做法用Maven,AndroidStudio出现后谷歌(谷歌(Google))推荐用Gradle。Android的塑造筑工程具比iOS成效要强硬很多。
iOS开发早期用CocoaPods,以后援引用Carthage,今后Apple官方推出Swift叁.0后会推广官方的斯威夫特Package Manager。
末段介绍下Xcode包管理器Alcatraz,首要提供Xcode插件,模板和色彩情势,比较Android
Studio,方今插件还很相比较少。

网站地图xml地图