P1第2章 量值与基本数据类型

变量与常量:

var str = "Hello, World!"

等价于

var str : String

str = "Hello, World!"

如果要修改变量的值,直接对变量再赋值(和变量类型一致)即可

命名:量值属性首字母小写

           类名、枚举名、结构体名首字母会大写


注释:

// 单行注释

/*

多行

注释

*/


元组:允许不相关的类型自由组合成为新的集合类型

var pen : (name : String, price : Int) = ("钢笔", 2)

指定参数名

上面代码在创建元组类型的同时指定了其中参数的名称,即名称参数为name,价格参数为price,开发者可以使用这些参数名称来获取元组中各个参数的值。

在创建元组时,也可以不指定元组中参数的名称,元组会自动为每个参数分配下标,下标值将从0开始依次递增:

不指定参数名

也可简写为:

var car = ("奔驰", 200000)

元组分解:

元组分解

在Swift语言中,常常使用符号“_”来表示匿名的概念,“_”也被称为匿名标识符。

如果不需要获取元组实例中所有元素的值,可以:

元组使用方便,但只适用于简单数据的组合,对于结构复杂的数据,采用结构体来实现。


可选值类型:

实际编程中,任何类型的变量都会遇到值为空的情况。Swift语言提供了一种包装的方式来对普通类型进行Optional包装,实现对空值的监控。

在Swift语言中,未初始化的普通类型是不被允许使用的,哪怕用来判空处理也不允许。

开发者在使用前必须保证普通类型的变量被初始化。

在声明sk变量的时候,将其声明为String?类型,在普通类型String后面加个"?",即可将普通类型包装为Optional类型。

Optional类型

Optional类型依附于某个具体的数据类型(Int, String等)之上,基本的数据类型可以是基本数据类型,可以是结构体,也可以是等。Optional类型只有两种值:

1. 其附着类型对应的值有具体值,则其是对具体值的包装

2. 其附着类型对应的值没有具体值,则其为nil

例:将Int类型的变量a进行Optional包装,此时a的类型为Int?,如果对a进行了赋值,则可以通过拆包的方式获取a的Int类型值,如果没有对a进行赋值,则a为nil。

Optional类型是对普通类型的一种包装,因此在使用的时候需要对其进行拆包操作。拆包操作符是"!"。

"?"符号如果出现在类型后面,其代表的是此类型对应的Optional类型;如果出现在实例后面,则代表的是可选链的调用。

"!"符号出现在类型后面,代表的是一种隐式解析的语法结构;出现在实例后面代表的是对Optional类型实例的拆包操作。

Optional类型中的nil可以理解为一种值,表示空;在使用"!"进行Optional值的拆包操作时,必须保证要拆包的值不为nil,否则程序会出错。可以在拆包前使用if语句进行安全判断:

拆包操作(注意?和!的位置)

Swift语言还提供了一种if-let语法结构来进行Optional类型值的绑定操作,可以将上面的结构改下如下:

if-let

理解:如果obj有值,则if-let结构将创建一个临时常量tmp来接收obj拆包后的值,并且执行if为真时所对应的代码块,在执行的代码块中,可以直接使用拆包后的obj值tmp。如果obj为nil,则会进入else代码块,在其中将obj重新赋值使用。这种if-let结构完成了判断、拆包、绑定拆包后的值到临时常量3个过程。

if-let结构中也可以同时进行多个Optional类型值的绑定,之间再用逗号隔开,示例如下:

if-let绑定多个Optional值

在同时进行多个Optional类型值的绑定时,只有所有Optional值都不为nil,绑定才会成功,代码才会进入if为真的代码块中。在if语句的判断中添加更多的业务逻辑,可以通过追加子句的方式来实现。

上面的代码,obj1不为nil,obj2不为nil,并且obj1对应的拆包值小于obj2对应的拆包值的时候,进入if为真的代码块中,即打印绑定的tmp1与tmp2的值。

对于一个可选值类型的变量,每次使用时都需要为其进行拆包操作,这相对有些麻烦,Swift中还有一种语法:隐式解析。隐式解析适用于这样的场景:当我们明确某个变量初始时为nil,并且在之后使用之前一定会被赋值时,我们可以将其声明为隐式解析的可选值,再对这个变量进行使用,就不需要进行拆包操作了。

隐式解析(注意感叹号的位置是在类型之后)

为类型取别名:

Price就是Int类型

你可能感兴趣的:(P1第2章 量值与基本数据类型)