腾讯Bugly深度解析:Swift在实战项目中的运用

发表时间: 2015-07-16 17:47

CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面。如果您想投稿、参与内容翻译工作,或寻求近匠报道,请发送邮件至tangxy#csdn.net(请把#改成@)。

简介

Swift语言从WWDC2014发布开始,到现在已经发展了一年多时间,越来越多的开发者也开始学习和使用这门语言。但就我所了解的情况来看,在实际项目中Swift的应用还是比较少。开发者给它的评价也是褒贬不一,有的说它的安全性高,有的说它的特性多,有的说它的学习成本高,还有的说它是一个玩具语言不适合工程。其实这都很正常,因为一千个人眼中有一千个哈姆雷特,语言的喜好本身就是一件很主观的事情。具体这个语言怎么样,适不适合工程,需要每个人实践之后才能得出自己结论。

Swift的特点

支持Unicode

代码原生支持Unicode字符。不仅在字符串中,甚至变量名、函数名等都能直接使用Unicode字符。虽然看上去很强大,但似乎并没有什么用,应该没人喜欢在编程时不停的切换输入法吧?

安全的类型

采用严格的类型,并去掉了隐式类型转换:

隐式类型转换一直是一把双刃剑,虽然使用便利,但是可能引入一些很难调试的BUG,不容忽视。把隐式类型转换摘除,利大于弊。

从类型层面将空值nil隔离,使用时要求对空值进行处理:

严格的语义逻辑

Swift对C语系一些常见的语义逻辑漏洞进行了修改,比如if等条件限定为Bool类型,赋值“=”操作不再有返回值等(其实有,是Void,即空元组“()”)。虽然使用上没有之前那么方便和灵活,但这种改变能杜绝很大一部分的手误BUG,比如“==”写成“=”,还能避免一些偷懒所引入的很隐秘的坑,对程序的稳定性和程序员好习惯的培养有很大帮助。

易用性

沿用并完善了Objective-C的函数中缀调用方式,参数有了真正的名字,调用时带上参数名能让函数接口更容易理解,可读性更好:

优化了可变参数定义和使用方式:

在C语系中定义可变参数还需要va_list、va_start等,一段时间不用根本想不起来怎么写,还得上网查,而在Swift中只需要遍历一个数组就能取到所有参数,非常方便。

优化了控制流的使用:

Switch的case可以连写,而且加入了很多实用的匹配模式,比如匹配范围、元组、条件等,还可以自定义匹配模式,十分强大。另外分支默认是break方式,不像在C语言中,明知道90%的case都是要break的,还要强制写上。还有一个很好的优化就是加入了跳转标签,在多重循环间控制转移的时候更灵活了。

加入了很多实用语法糖,仅仅一个闭包就有这么多简写方式:

这些语法糖能节省大量的开发时间和代码量,使用得当也能让代码更清晰,可读性更好。当然如果滥用的话可能起反作用。

丰富的语言特性

Swift支持类、协议、继承、多态等面向对象的语言特性:

也有高级函数、闭包等函数式编程特性:

还有泛类型、泛函数、泛协议等泛型编程特性以及操作符自定义等新特性:

总之Swift加入了大量的流行语言特性,功能灵活、强大,但是语法点也增加了很多,导致语法学习难度增大,各位可以按需要进行有针对性的学习。