zoukankan      html  css  js  c++  java
  • 【iOS开发每日小笔记(六)】Swift语言学习的入门随想

    这篇文章是我的【iOS开发每日小笔记】系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧。它们可能会给用户体验、代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下。90%的作用是帮助自己回顾、记忆、复习。

    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/

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

  • 相关阅读:
    day54
    day53
    CAS客户端整合(四)-- Cacti
    不重新编译安装php模块的方法
    CAS客户端整合(三) Otrs
    CAS客户端整合(二) Zabbix
    CAS客户端整合(一) Discuz!
    [Django笔记] Apache + mod-wsgi 环境部署所遇到的各种问题总结
    Baidu
    Scrapy框架初探
  • 原文地址:https://www.cnblogs.com/pigpigDD/p/3944450.html
Copyright © 2011-2022 走看看