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/

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

  • 相关阅读:
    How to build Linux system from kernel to UI layer
    Writing USB driver for Android
    Xposed Framework for Android 8.x Oreo is released (in beta)
    Linux Smartphone Operating Systems You Can Install Today
    Librem 5 Leads New Wave of Open Source Mobile Linux Contenders
    GUADEC: porting GNOME to Android
    Librem 5 – A Security and Privacy Focused Phone
    GNOME and KDE Join Librem 5 Linux Smartphone Party
    Purism计划推出安全开源的Linux Librem 5智能手机
    国产系统之殇:你知道的这些系统都是国外的
  • 原文地址:https://www.cnblogs.com/pigpigDD/p/3944450.html
Copyright © 2011-2022 走看看