这篇文章是我的【iOS开发每日小笔记】系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧。该分类的文章,内容涉及的知识点可能是很简单的、或是用很短代码片段就能实现的,但在我看来它们可能会给用户体验、代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下。其实,90%的作用是帮助自己回顾、记忆、复习。如果看官觉得太easy,太碎片,则可以有两个选择:1,移步【iOS探究】分类,对那里的文章进行斧正;2,在本文的评论里狠狠吐槽,再关掉页面!感谢!
Swift语言是Apple在2014年WWDC上发布的一门编程语言(http://en.wikipedia.org/wiki/Swift_(programming_language)),发布快三个月以来,风风光光也得到了不少的聚光灯,各种捧的贬的分析的文章网上都有很多,我也就不跟着瞎分析起哄了。我的这篇随笔,就来简单说说我在实际学习中的一点点小看法。目前我也在一步步的学习中,以后再有更多的感想,也会分享在我的博客中。
一:首先谈谈总体感觉。
Swift这门语言,在逼格高级程度上来说,个人觉得是高于ObjC的。代码风格上灵活度更高,更潇洒简约。如果你是像我一样从ObjC转过来的话,会发现很多Swift的写法很多都是能省就省。最简单的例子:
1 var x = 0.0
1 var slice = arr[0...1]
1,语句后面不再需要";"来表示一句结束;2,使用"..."来表示“遍历”数组中的一段元素;……
反观ObjC,却是另一番景象:所有的cocoa touch接口都是能长就长,每个方法的方法名一定要用“驼峰”风格描述的非常清楚,比如:
1 - (NSArray *)subarrayWithRange:(NSRange)range;
所以,在绝大多数情况下,ObjC语法上更直白,更冗长,更接近于基本的C语言。而Swift则能省就省。这样带来的结果就是有人说,Swift更“优雅”,另一部分人会说ObjC更“清晰”。你怎么看呢?
二:代码风格提供更安全的编码
1,Swift提供两种类型来修饰所有的变量,一种是let,表示常量;另一种是var,表示变量。let修饰后的常量,只能赋值一次,就不能在改变了。而var则可以多次改变。
2,Swift中的Array,Dictionary不再像ObjC中的那样,分为可变与不可变。取而代之的是用let修饰不可变(包括内部元素不可变),var修饰可变(包括内部元素可变)
3,声明一个变量(或常量)可以显示的指明类型,也可以不指明类型:
1 var welcomeMessage:String = "message"
1 var welcomeMessage = "message"
根据Apple的官方说法,通常情况下,我们应该使用隐式的声明,就像第二个代码那样。编译器会自行判断赋给的值"message"是什么类型,从而确定welcomeMessage的类型,这样更“优化”。而如果你显示地指定了类型":String",那么编译器就会先行判断你赋的值,是不是String,只能是String。这也算是一种“安全性检验”吧。(尽管并没有想象得那么高级)。
三,坑很多!
这里说的坑并不是说Swift这门语言本身的bug。而是因为开发版本在不断的更新(目前是XCode6-beta5),导致初学者需要关注最新最新的教程,包括Apple自己的官方文档。如果你看的是GitHub上的翻译中文版,那么里面也会有一些内容是滞后的。
举两个例子:
1:
1 /* 2 * 1,..< 和 ... 3 */ 4 let array5 = [100, 200, 300] 5 for i in 0..<2{ 6 println("\(array5[i])") 7 }
这是遍历数组的一种方法:在过去的版本中"0...3"表示从0到3,包括3, "0..3"表示从0到3,不包括3。而现在".."被改成了"..<","..."则不变。
2:
1 /* 2 * 1,通过range取出的数组的一部分【Slice类型】和Array、Dictionary行为相同,通过Range拿到的Slice中的元素不再是指向原来的 Array的 3 * 4 */ 5 var arr:Array = [0,0,0] 6 var slice = arr[0...1] 7 arr[1] = 1 8 slice[0] = 2
从Array类型中,取出一部分元素。经历了两次改变。目前“最终”的特性是经过上面的操作,arr最终为:[0, 1, 0],而slice最终为:[2, 0]。并且这里的slice变量,是一个Slice类型的结构体,而不是Array。另外,请注意在Swift中,Array、Dictionary甚至是Int、String都是结构体,而不是类。
以上两个例子,是想说明:Swift虽然已经发布,但是到正式iOS8面世、XCode6正式版发布这一段时间内,改动还是比较大的,特别是对基本类型,基本运算符的多次改变,导致像我一样想第一时间尝鲜的开发者会有一些不爽,隐隐之中觉得“坑”好多。不过呢,另一种观点是通过研究Apple对Swift的一步一步改变,可以更深入地理解Swift内部的一些东西,也是对掌握好Swift语言的一种特别的途径。
综合以上几点,Swift这两天的学习给我的感受是:优雅,高端,借鉴了各种其他语言的优势,耐心琢磨、忍受Apple的更新,并尽快地适应。
最后分享一些博文和学习连接:
喵神的文章:http://onevcat.com/2014/06/walk-in-swift/ 。
泰然的几篇翻译教程:http://www.tairan.com/archives/6837 个人觉得挺失水准的,无论是在翻译上,还是raywenderlich的原著上。难道真的是东西文化差异?但是对playground的讲解还不错,初学可以用用playground玩玩。
uml的文章:http://www.uml.org.cn/mobiledev/2014071110.asp http://www.uml.org.cn/mobiledev/2014070811.asp
中文版 Apple 官方 Swift 教程《The Swift Programming Language》http://numbbbbb.github.io/the-swift-programming-language-in-chinese/
基本上最后一个官方教程,才是你需要花时间去学习的。