【iOS开发每日小笔记(六)】Swift语言学习的入门随想

这篇文章是我的【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/

基本上最后一个官方教程,才是你需要花时间去学习的。

时间: 2024-12-09 18:36:33

【iOS开发每日小笔记(六)】Swift语言学习的入门随想的相关文章

【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 测试组的小伙伴们大显神威,iOS8刚发布,他们就把测试设备急速升级了,然后就是扑面而来的各种bug和他们各种幸灾乐祸的笑.没办法,老老实实修复bug! 来看看今天我遇到的一个问题: 项目中,我将一个简化的H

转:【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber

http://www.bubuko.com/infodetail-382485.html 这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 测试组的小伙伴们大显神威,iOS8刚发布,他们就把测试设备急速升级了,然后就是扑面而来的各种bug和他们各种幸灾乐祸

【iOS开发每日小笔记(十)】自制带圆框的头像 利用在CALayer设置“寄宿图”

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 在上一篇文章中,我详细地回顾.复习了Core Graphics框架中利用Quartz 2D来绘制各种各样的图形,其实这些绘图就是绘制到了UIView的CALayer层上.这次,受到另一篇博文(http://

【iOS开发每日小笔记(九)】在子线程中使用runloop,正确操作NSTimer计时的注意点 三种可选方法

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.其实,90%的作用是帮助自己回顾.记忆.复习. 一直想写一篇关于runloop学习有所得的文章,总是没有很好的例子.正巧自己的上线App Store的小游戏<跑酷好基友>(https://itunes.apple.com/us/app/pao-k

【iOS开发每日小笔记(五)】实测copy到底是个神马玩意

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.其实,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,太碎片,则可以有两个选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在本文的评论

【iOS开发每日小笔记(十二)】仿Facebook登录界面 错误提示抖动 利用CAAnimation设置动画效果

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 原本以为国庆假期可以有时间看看书,写写博客.实际上大部分时间都被赶场参加婚礼和到处去亲戚家串门吃饭所占用.眼看明天还剩最后一天时间,今天赶紧来更新一篇,也算是没有完全荒废这7天长假吧! Facebook的客

【iOS开发每日小笔记(四)】iOS 7中如何除去UIAlertView 规避delegate对象销毁后接收消息的crash

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.其实,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,太碎片,则可以有两个选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在本文的评论

【iOS开发每日小笔记(一)】UIPickerView 自动选择某个component的某个row

从这篇文章开始我将会把每天在开发过程中遇到的,可以用很短的文章.很小的demo演示解释出来的小心得小技巧,分享在[iOS开发每日小笔记]这个分类中.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们会给用户体验.代码效率得到一些提升,记录在这里,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,可以选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在本文的评论里狠狠吐槽,再关掉页面!感谢! 今天在项目中遇到这样一个小问题:我使用UI

【iOS开发每日小笔记(十三)】使用UIDocumentInteractionController 打开ibooks文档的注意点

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 大约两年多前,我曾尝试自己写一个程序,用来解析Word文档.当时满腔热血,认为只要是把xml各种标签一一对应解析就好了(当时还不知道有CoreText这档子东西).后来发现自己实力不够,在解析了图片.文字.