2.1 变量与常量

在Swift语言中,let关键字和var关键字分别用来表示常量和变量。无论是let还是var,其作用都是为某个具体量值取了一个名称,在编程中,这种方式叫作量值的声明。在量值的有效作用域内,开发者可以使用这些名称来获取到具体的量值。编程中有两个最基本的概念:量值和表达式。我们可以简单将量值理解为结果,例如数字3就是一个整数型量值;字符串“hello”就是一个字符串型的量值。而表达式可以理解为一个计算过程,其结果会是一个量值,例如1+2就是一个表达式,其结果为量值3;“hello”+“world”也是一个表达式,其结果为量值“hello world”。大多数表达式都是由量值与运算符组成的,这些会在后面具体向读者介绍。

2.1.1 变量与常量的定义和使用

使用Xcode开发工具创建一个命名为Swift_Basic的playground文件,可以看到模板中自动生成了以下两行代码:

    //引入UI开发框架
    import UIKit
    //定义一个变量 赋值为字符串"Hello, playground"
    var str = "Hello, playground"

上面的代码中,第1行代码是引入iOS开发框架中的一个UI框架,后面的实战阶段中会向读者详细介绍。第2行代码实际上进行了两步操作,首先声明了一个变量str(str就是此变量的名称),之后将“Hello,playground”字符串赋值给这个str变量。我们可以将以上代码分解为如下代码:

    //1声明字符串变量str
    var str:String
    //2对字符串变量str进行赋值
    str = "hello,playground"

上面的代码中演示了为量值指定类型的语法,即在常量或者变量名后加冒号,冒号之后写上指定的类型名。Swift是一种类型安全语言,即常量或者变量在声明的时候必须指定明确的类型。看到这里,读者可能会有一些疑问,为何在Xcode生成的模板代码中没有指定str变量的类型,系统依然没有报错,原因要归功于Xcode编译器,Xcode编译器支持对Swift语言的类型自动推断,当声明变量时如果直接给变量赋初值,则编译器会根据赋值的类型来确定变量的类型,之后变量的类型将不可更改。Swift中可以使用print()函数来进行打印操作,例如打印变量str,示例代码如下:

    //量值的打印
    print(str)

在使用常量或者变量时,开发者可以直接通过名称来调用对应的量值,示例代码如下:

    //更改str变量的值
    str = "newValue"
    //在str字符串变量后边追加hello
    str = str+"hello"

Swift语言也支持在同一行语句中声明多个常量或者变量,但是要遵守明确类型的原则,至于具体类型是开发者指定的还是编译器推断的并无关系,例如:

    //声明定义了3个变量 整数类型变量a 浮点数类型变量b 字符串类型变量c
    //编译器推断
    var a=1,b=2.9,c="string"
    //手动指定
    var a2:Int=1,b2:Float=2.9,c2:String="string"

如果在同一句代码中声明多个变量并且都没有提供初始值,可以通过指定最后一个变量的类型对整体进行类型指定,例如:

    //声明3个Int类型的变量
    var one,two,three:Int

上面代码中声明的one、two、three都是Int型变量。

提示

(1)Swift语言是一种十分快速简洁的语言,其允许开发者省略分号,自动以换行来分隔语句,同时也支持在一行中编写多句代码,此时需要使用分号对语句分隔,例如:

var str:String;str = "hello,playground";print(str)

(2)对Swift语言的类型推断是Xcode编译器一个十分优秀的特性,在实际开发中,开发者应该尽量使用这种特性。

(3)如果需要修改变量的值,直接对变量再赋值即可。需要注意的是,所赋值的类型必须和变量的类型保持一致。

2.1.2 变量和常量的命名规范

在Swift语言中,常量和变量的命名规则十分宽泛,可以包括Unicode字符和数字,需要注意的是,不可使用预留关键字来作为常量或者变量的名称,例如let、var这类的关键字不可作为量值名来声明。另外,常量和变量的命名不可以数字开头,空格、数学符号、制表符、箭头等符号也不可用在命名中。

可以使用中文进行命名,示例如下:

    //使用中文进行变量的命名
    var 珲少 = "珲少"

可以使用表情符号进行命名,如图2-1所示。

图2-1 使用表情符号进行变量的命名

可以使用穿插数字进行命名,注意数字不能作为开头:

    //含有数字的命名
    var pen2 = "钢笔"

可以使用下划线进行命名:

    //使用下划线进行命名
    var _swift_ = "swift"

虽然Swift支持的命名方式十分广泛,但在实际开发中,良好的命名风格可以大大提高编码效率与代码的可读性。Swift语言官方文档采用驼峰命名的方式。所谓驼峰命名,是指以单词进行名称的拼接,名称的首字母一般为小写,之后每个单词的首字母大写,其他字母均小写。示例如下:

    //驼峰命名
    var userName = "珲少"

提示

(1)Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode于1990年开始研发,1994年正式公布。

(2)Swift中的命名也有一些约定俗成的规则,例如量值属性首字母会小写,类名、枚举名、结构体名首字母会大写。

(3)如果在命名中真的需要使用预留的关键字进行命名,可使用`符号进行包装,但是如非万不得已,开发中应尽量不使用这种方式命名,包装示例如下:

//用预留关键字进行命名
var `var` = 2