1.1类型别名

怎么去理解所谓的类型别名,可以这么去想,比如你在外面亲戚朋友会叫你一个名称,在家里面父母会叫你另外一个名称,农村里面一些人所说的小名、大名。 :huaji13:
那么下面介绍类型别名的使用:

typealias dog = String
var alpha:dog = "hello"
var beta:String = "world"
//字符串拼接
print(alpha+" "+beta)
/*
*编译器打印结果:
hello world
*/

1.2类型转换

类型转换在所有编程语言里面都有自己的转换方式。[heimu]这里我讲了些对从来没有接触过代码的人理解起来会好些的解释,不过我讲的有点而“乱”,具体了解建议亲自上手写了才会知道[/heimu] :huaji9:
结合上一章的数据类型来看会好很多,以下在Swift里面转换简单演示:


//Int是只存放整数的,那么你有小数的是自然会自动变成整数不会出现四舍五入
print(Int(100.55))
//Double只存放小数的,那么你用整数去转自然会自动在默认出现小数"10.0"
print(Double(10))
//Bool只要有值那么就会是true,而0代表没有值就会是false,不管是负数还是正数都会变成true
print(Bool(29.738))
print(Bool(0))
print(Bool(-12312))
/*
*编译器打印结果:
true
100
10.0
true
false
true
*/

这里讲下??,因为有的人会问了如果我用常量或变量来定义要转换的值那么该怎么写呐 :huaji13:

let a = "双击666"
print(String(a))
print(Int(a) ?? 666)
print(Float(a) ?? 66.6)
print(Double(a) ?? 6.66)
print(Bool(a) ?? true)
/*
*编译器打印结果:
双击666
666
66.6
6.66
true
*/

为什么加了英文的两个问号,应该转换"双击666"怎么变成?? 后面的数值了,估计聪明的你也猜到了,是默认值,在两个类型无法互相转换的时候给予了默认值则会直接使用默认值,而不是我们定义的值。
看文章的你在想那我就是不给会怎么样  [heimu]小伙子不要乱搞事会爆炸的,懂嘛 :huaji23: [/heimu]

let a = "双击666"
print(String(a))
print(Int(a))
print(Float(a))
print(Double(a))
print(Bool(a))
/*
*编译器打印结果:
双击666
nil
nil
nil
nil
*/

因为你给字符串String里面包含了数字、文字的时候,转换到Int、Float、Double、Bool都会直接变成空值nil,纯文字转整型、浮点型、布尔值都会变成nil
[heimu]当然你代码写的有问题的时候肯定会bug报错什么的,不然你以为为什么写代码要有规范[/heimu]:huaji13:
但是纯文字是"true"或"false"转布尔值或纯数字转换整型、浮点型则会提示你Optional(转换值文字或数字),这也是接下来我们要学的Optional

1.3可选类型

可选类型是个非常重要的知识点但也是非常简单的,什么是可选类型呐,指的是他可能有值可能没有值.
具体我们以下面演示:

var a = nil //这样设置为空是不行的编译器会报错的,你需要明确指定一个类型
var b:Int? = 10 //设置为Int又加了个?,表示设置为可选类型,因为你不确定b赋值的到底是不是Int类型
print(b)
print(Int("100"))
/*
*编译器打印结果:
Optional(10)
Optional(100)
*/

在变量赋值或是变量转型的时候因为不确定你输入的到底是什么东西,所以则会返回一个Optional可选类型,而之前上面我们不也讲到了??,所以这个时候我们就要用到了,在不确定你所转型、赋值的数据给指定的变量时候就最好用上??来确保该变量是有一个值而不是空值nil
[heimu]估计又有想搞事情了说我var a:Int? = String(10) ?? 100, :pen: 你.....数据类型你白学了,哪有字符串赋值给整型或浮点型的,再说了你敢这样写编译器都不敢这样跑代码,立马提示你代码语句错误[/heimu]

var b:Int? = 10
var c:Int? = nil
print(b ?? 0)
print(c ?? 100)
/*
*编译器打印结果:
10
100
*/

在已经确定了该指定变量是有值的加一个!来取出真实的值

var b:Int? = 10
var c:Int? = nil
print(b!)
print(c)
/*
*编译器打印结果:
10
nil
*/