自Java/Android到Swift iOS开发:语言及框架对比

正文是本身在『移动前线』微信群2016年4月28日底分享总结整理。
自身自2009年开班做Android开发,开始接触Swift是以2014年底,当时组里曾经开了一个Demo
App,感觉技术还不够成熟没有正经通告。2016年初我们正式以swift开发上线了销售助手App产品,积累了比较丰富的swift项目实战经验,开源框架还是用之swift版本,大量应用了面向协议以及函数式编程。iOS
App开发人员基本还是先前安卓版的开发人员,同时保护安卓和iOS
2独本子,效率很高。
今日享受的主题是Java/Android开发人员如何迅速达标手Swift
iOS开发。主要内容如下:

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

1、Why FromJava/Android to Swift

资本及效率

由于当下跟业务的Android和iOS
App产品功效雷同,由一个团伙开发可减低业务并和联络成本,避免安卓和iOS两只组织带来的产品效果差异及关联成本。

Swift语法更接近Java,相对Objective
C上亲手容易,我2012年曾带了iOS项目,学过oc,因为无法忍受oc奇怪的语法最后放弃了,但这次上swift
iOS过程还是蛮顺利的,学习之要害门槛反而是Xcode IB的施用。

Why not React Native?

ReactNative我们也只要种于用。但RN思想与语法的读曲线来若干陡,很多起Web开发经历的总人口且不肯定爱。另外多安卓开发者并从未学过js,学习React
Native成本会比较高。学习React
Native最终还是设指向原生开发出早晚之刺探。最后,在局部成效复杂的App,React
Native用户体验比不上原生 。

Why not HTML5 Hybrid App?

用户体验不敷好,对于不熟悉Web开发的工程师学习成本较大。
2014年我们因此ionic框架做过混合App,在iOS上力量好,但于安卓低端机上比卡,影响用户体验。

2、Swift语言为什么值得学习?

Swift是今Apple主推的语言,2014年初生产的言语,比Scala等“新”语言还要年轻10夏。2015年秋已经开源。目前于linux上可用,最近已经支持Android
NDK;在培养莓派上出SwiftyGPIO库,可以经过GPIO控制一些硬件。
ObjectC is old and ugly,oc是1983年苹果推出的,过于陈旧和臃肿。
Swift语法类似Scala,Javascript ES6, Java,OC, C++,
Python,这个自家是按部就班语法相似度排序的。
Swift支持多范式编程:面向协议,面向对象和函数式编程 。
末了,我们尚得经Swift学习函数式编程思想,这块Java8才支撑。

3、Java vs. Swift语法比较

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

3.1基础语法

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

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差异非常死

3.2 函数和闭包

Swift函数的定义及Java很无同等,Swift函数的定义形如 func foo(arg: Type)
->Return Type:
Swift中函数是一致顶人民,可以看成返回值和参数;Swift支持闭包,Java8才支撑lambda闭包。
Swift支持元组,Swift函数可以通过返回元组支持多单返回值。
Swift函数可以嵌套,即一个函数内部还可定义函数,Java不支持。
Swift函数可以接收不定参数,跟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开发谷歌官方不建议用Enum,影响性。
Swift的Enum和Java类似,本质是一个类似,里面可以涵盖函数。
SwiftEnum语法更简单。
SwiftEnum支持扩展extension。

3.5 Interface vs. Protocol

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

Extension扩展就是朝一个业已有的类、结构体或枚举类型添加新力量(functionality)。这包括在没权限获取原始源代码的景下扩展类型的力(即逆向建模)。扩展和
Objective-C 中的分类(categories)类似。
Swift 中之扩张可以:

  • 增补加计算型属性和计量静态属性
  • 概念实例方法及类型方法
  • 供新的构造器
  • 概念下标
  • 概念跟运用新的嵌套类型
  • 假如一个早就出品种符合某个接口
    待注意的凡扩大方法的作用域问题,这里不展开讨论。

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。现在Xcode7版本对AutoLayout和SizeClasses的支持更好,多分辨率适配变得简单,建议大家放弃下frame代码写界面的风做法。
自,Storyboard也生下的弊端:
界面主要依靠IB生成,Xib代码难以保障,Xcode打开Storyboard或Xib就会见对文本发出修改,即使我们无举行实际的修改,git也会见显示文件修改了。
大多总人口拉,同时修改导致撞,合并困难。
Storyboard中富含页面多了晚会占用了最多内存,导致Xcode卡顿跟崩溃。
左定位困难,错误提示无清楚,新手难以稳定错误。例如不小心删掉了IBOutlet会充分不便定位。

Storyboard UI 开发执行

依业务模块分成基本上单Storyboard,每人承担的模块避免交叉。
每个storyboard不要过10独页面,可以经过Refactor
Storyboard功能又划分。
用Container在一个storyboard复用UI模块,用xib在多个storyboard复用UI模块。
复杂的输入表单,建议就此SwiftyForm框架写代码。

5、Android vs Swift iOS框架比较

Swift框架现在既重重了,Swift也堪下OC开源框架,但切莫引进下。我们要对比介绍项目常用的网络要框架,JSON解析及图纸缓存框架

纱要框架

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开发我们一般以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开发推荐用HanekeSwift。

6、开发工具比较

Android目前主流的开发工具是Android Studio,2014年以前是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出现继谷歌推荐用Gradle。Android的构建工具比iOS功能要强大很多。
iOS开发早期用CocoaPods,现在引进用Carthage,未来Apple官方推出Swift3.0后会见加大官方的Swift
Package Manager。
末尾介绍下Xcode包管理器Alcatraz,主要提供Xcode插件,模板与色彩模式,相比Android
Studio,目前插件还百般比较少。

网站地图xml地图