天天看点

《iOS移动开发从入门到精通》图书连载8:Swift的基本概念(上)

Swift是Apple于2014年WWDC(苹果开发者大会)发布的全新开发语言,可与Objective-C共同运行于mac OS和iOS平台,用于搭建基于Apple平台的应用程序。

本章主要为您介绍了Swift 3.0的常量、变量、数据类型、运算符、循环语句、条件语句等一些基础的语法知识。

3.1Swift的基本概念

Swift是一种强劲而直观的编程语言,它由Apple创造,可用来为iOS、Mac、Apple TV 和 Apple Watch等设备和平台开发应用程序。Swift语言旨在为开发者提供充分的自由,所以它易用并且开源,只要有想法,谁都可以使用Swift创造非凡的作品。

Swift 将现代编程语言思想的精华,和苹果工程师文化的智慧结合了起来。编译器对性能进行了优化,编程语言对开发进行了优化,两者互不干扰,鱼与熊掌兼得。所以Swift具有快速而且高效的特点,它还是第一套和脚本语言具有同样表现力和趣味性的系统编程语言。

Swift的设计以安全为出发点,以避免各种常见的编程错误类别。Swift能够提供实时反馈,而且可以被无缝集成到现有的 Objective-C 代码中,因此开发者能够编写安全而可靠的代码,并在节省时间的同时,创造出非常丰富的 app 体验。

在苹果官网提供了一些使用Swift语言开发的知名App,如图3-1-1所示:

《iOS移动开发从入门到精通》图书连载8:Swift的基本概念(上)

图 3-1-1(来自apple.com)

    Swift语言非常契合2014年WWDC的slogan:Write the code,change the world。(写代码,改变世界)。Swift作为新的编程语言,它集中了很多其它高级语言的影子,集成了它们的很多优点。它和Javascript、Go、Ruby、Python等语言都有些神似,并且它的语法更加接近自然语言,使得编程的过程变得更加简单和有趣。这些变化进一步降低了苹果平台上App开发的门槛,延续苹果一贯主张的用App来解决一切问题,而这也是苹果生态链中重要的一个环节。

随Swift推出的新版集成开发环境Xcode已经完全支持使用Swift。Xcode所附带的在线文档中也在原有的Objective-C内容的旁边放上了Swift的说明,可见苹果是多么重视Swift语言的发展。这也正好印证了前面提到的,苹果在降低自己生态链中最总要一环的门槛,这会使得苹果自身的竞争力进一步加强。

虽然目前看来,Swift语言可能还不够完美,比如可以使用的第三方库还也较少。但是它的出现,代表着接近自然语言语法的编程方法正在快速的发展,从而使每个希望编写应用程序的人都可以很容易上手编码工作,并快速开发出质量高的应用程序。

3.1.1  Swift语言的特点

  • 代码的编写更加简洁;
  • 结合Playground,可以做到真正意义上的所见即所得;
  • 便于扩展,通过桥接可以使用Object-C代码;
  • 直接支持闭包;
  • 支持面向过程编程和面向对象编程;
  • Swift全面优于Object-C语言,性能是Object-C的1.3倍,并且上手更加容易;
  • 使用自动引用计数(AutomaticReference Counting, ARC)来简化内存管理;
  •  Swift是一门类型安全语言,类型安全语言需要代码里值的类型非常明确。如果您的代码中有部分值需要 Int类型,你就不能错误地传递String;
  • Object-C需要头文件.h和实现文件.m,而Swift只需要一个.swift文件;
  • Swift不再需要分号;作为代码的分隔符了;

3.1.2 Swift常量和变量的定义

常量所指向的是一个特定类型的值,如数字8或者字符“Swift”。变量的值可以根据需要不断进行修改,而常量的值一经定义,是不能够被修改的。

常量和变量在使用前都需要定义 (声明),在Swift中定义常量和变量变得非常简单。您可以使用let关键词定义一个常量,使用var关键词定义一个变量。

1       let pi =3.14159265                    //常量
2        var enemyKilled = 100               //变量
           

在上面的代码中,首先定义了一个常量pi,表示圆周率,因为圆周率是固定不变的,所以将其定义为常量。接着又定义了一个变量enemyKilled,表示在游戏场景中消灭的敌人数量。因为玩家水平不同,消灭的敌人数量也不相同,所以这里定义为一个变量。您可以根据需要,修改变量的值。与变量不同的是,常量的值一旦确定就不能修改。如果想尝试改变一个常量的值,编译代码时就会报错。

您可以在同一行代码中,定义多个常量或变量,名称之间使用半角逗号分隔:

1        var length = 10, width =20, height = 30
           

您不需要为常量指定数据类型,但是必须给常量指定一个值。编译器会根据常量的值,自动判断常量的类型。在上面的代码中,编译器会认为pi常量的数据类型为浮点类型,因为它的值是一个浮点数。一旦定义了一个常量或变量,您将不可以再改变它们的数据类型。

为了能够直观地显示常量或变量的数据类型,您也可以在定义常量或变量时通过冒号设置它们的数据类型:

1      var age : Int = 24      //为变量age设置整型的数据类型
           

这里定义了一个名为age的变量,它的类型为整型,值为24。Swift 提供了与Object-C的相似的基础数据类型,包含整数Int,浮点数Double、Float,布尔值 Bool 以及String 字符串。同时Swift也提供了两种强大的集合数据类型:数组Array和字典Dictionary。

Swift可以使用几乎任何字符来作为常量和变量名,包括Unicode字符。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。它也包含了各种文字编码,如中文、日文、韩文、英文等字符;甚至是聊天工具中使用的表情符号等。虽然常量或变量的名称都可以包含数字,但是名称的开头不能是数字:

1       let _count = 6            //正确的命名方式
2       let count = 8              //正确的命名方式
3       let Count = 8             //正确的命名方式,Swift命名是区分大小写的
4       let 猫 = “Cat”  //正确的命名方式,中文字符可以作为常量或变量的名称
5       let  = “Cat”   //正确的命名方式
6       let default = 0            //错误的命名方式:default作为关键字不能被用作常量或变量的名称
7       let 8Count = 8           //错误的命名方式:数字不能放在名称的开头
8        let count# = 8;                   //错误的命名方式:名称中不能包含特殊字符
 
           

在定义常量时,通常使用大写的常量名称,这样代码将更加具有识别性:

1       let PI= 3.14159265    
           

在定义变量时,为了统一项目的编码风格,您可以采用驼峰命名法,或者使用下划线风格:

1       varenemyKilledNumber = 100          //驼峰风格命名法
2       varenemy_killed_number = 100                //下划线风格命名法                            
           

3.1.3常量和变量的输出

Swift使用print全局函数来输出变量或者常量。除了使用print函数,您还可以使用debugPrint、dump函数来输出常量和变量的值。Swift原来提供的println函数,已经被更名为print函数,所有print函数拥有了和println函数相同的功能,即输出变量或常量的值之后,再输出一个换行:

1       var str ="Hello, Swift"
2        
3       print(str)                              //输出内容为:Hello, Swift
4       debugPrint(str)                   //输出内容为:" Hello, Swift"
5       dump(str)                            //输出内容为:- Hello, Swift
           

在第3行至第5行之间的所有代码,都可以输出

Hello,Swift

内容。

在print语句中使用小括号,可以同时输出多个常量或变量的值,在小括号的左侧需要添加反向斜线\。

1       let name = "王丰"
2       let age ="24"
3        print("我的名字是\(name),今年\(age)岁了。")                           
           

第3行语句的输出结果为:

我的名字是王丰,今年24岁了。
           

您也可以使用+号,进行输出语句的拼接,将第三行的代码替换为:

1       print("我的名字是"+name+",今年"+age+"岁了。")
           

输出的结果同样是:

我的名字是王丰,今年24岁了。
           
《iOS移动开发从入门到精通》图书连载8:Swift的基本概念(上)
《iOS移动开发从入门到精通》图书连载8:Swift的基本概念(上)
《iOS移动开发从入门到精通》图书连载8:Swift的基本概念(上)
《iOS移动开发从入门到精通》图书连载8:Swift的基本概念(上)
《iOS移动开发从入门到精通》图书连载8:Swift的基本概念(上)
《iOS移动开发从入门到精通》图书连载8:Swift的基本概念(上)
《iOS移动开发从入门到精通》图书连载8:Swift的基本概念(上)