前些时iOS9携带swift2.0更新,我也将项目更新到了最新的版本上线。
xcode在Edit菜单下,convert->To Latest Swift Syntax和convert->To Modern Objective-C Syntax,这两个功能能帮助调整优化代码,并让人快速了解语言的最新动态。
swift1.x时我曾发牢骚说swift的难用(http://www.jb51.cc/article/p-voejtkzp-es.html),当时除了编辑器频繁崩溃、调试器断点不准等工具不够成熟的原因之外,语言也没表现出让人欣喜的特性,而为了兼容iOS SDK,更有许多让人不爽的hack。
不过毕竟又多了一年的改善,工具有了很大进步。现在虽然偶尔编辑器会不进行补全、调试器单步依然乱跳之外,比之前已经好多了。语言上,swift2.0如下特性还是很不错的:
1. guard关键字。像我这种在函数入口,对function input不验证不舒服斯基的人,感觉生活一下美好了。guard还附带了optional unwrapping,赞!
2. forced exception。exception的定位是:系统无法正常运行了,必须要有特殊的干预,需要catch来特殊处理;而普通出错的NSError,其实可以认为是有不同返回情况的正常调用。这样的设计思路,能够让开发者能更清晰的知道何处必须单独处理,何处可以抓大放小。
3. 关于struct的言论。WWDC 2105中有一个讲座,言及truct优于class之处,其中提到struct的数据安全性,感觉还是有一些道理的。当然,我们这种从C走过来的人,对效率的追求已经深入骨髓,因此对于C++总是会不自觉地推崇。但从另一方面来看,在现在云计算的热潮下,单台计算机的计算效率也许真的不如原来那么重要了。从程序角度而言,算法效率上的改善无论何时都是第一要义的,语言特性所带来的效率提升(比如越界检查检查、数据拷贝等),则应该做在编译器侧,而不应该是代码需要关注的问题。从这个角度而言,pass by pointer,pass by value这类C++中让人引以为傲的精微之处,也许真的没那么重要了。(前些时C++11中的move constructor还让我眼前一亮,感叹于c++对于数据拷贝的细致;其与swift中关于struct的言论,可以认为是两种不同的编程哲学,谈不上谁对谁错,可以认为是各自有其适用情形)
希望swift越来越好。