腾讯Bugly干货分享:浅谈Swift在实际项目中的应用

jopen 9年前
 

简介

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

Swift 的特点

支持 Unicode

腾讯Bugly干货分享:浅谈Swift在实际项目中的应用

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

安全的类型

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

腾讯Bugly干货分享:浅谈Swift在实际项目中的应用

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

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

腾讯Bugly干货分享:浅谈Swift在实际项目中的应用

严格的语义逻辑

腾讯Bugly干货分享:浅谈Swift在实际项目中的应用

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

易用性

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

腾讯Bugly干货分享:浅谈Swift在实际项目中的应用

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

腾讯Bugly干货分享:浅谈Swift在实际项目中的应用

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

优化了控制流的使用:

腾讯Bugly干货分享:浅谈Swift在实际项目中的应用

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

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

腾讯Bugly干货分享:浅谈Swift在实际项目中的应用

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

丰富的语言特性

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

腾讯Bugly干货分享:浅谈Swift在实际项目中的应用

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

腾讯Bugly干货分享:浅谈Swift在实际项目中的应用

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

腾讯Bugly干货分享:浅谈Swift在实际项目中的应用