swift对数据进行了分类,分类是人类认识这个世界的重要方法,我们在学习的过程中常常会用到这种方法,比方我们把世界分类为动物,植物,有机物无机物等等,这里有一个有趣的矛盾,我们一边对世界做分类,一边还要探索世界的本源,人类越是认识这个到这个世界的五彩缤纷,人类就也迫切希望能够知道这个世界的本源是什么。
这个矛盾也同时存在于swift语言当中。swift一面对数据做分类,一面通过对类型抽象来实现一致性的表达。我们先描述一下swift的分类,后面会详细整理类型的抽象。
1、基本类型
- Int:表示整数,包括正数、零、负数,例如 1、0、-1
整型包括符号整型(Int)、无符号整型(UInt),每种类型又包括8、16、32、64位的表达形式,对于一个初学者来说,你完全可以暂时忽略这些内容,只简单使用 Int。
- String: 表示文本,例如我们已经使用过的 "Hello,swift",在swift中,用""括起来的内容基本就是文本类型。
注意
我们经常需要对String进行拼接、遍历、替换字符等操作,因为String是值类型,其内容又是characters集合类型,所以其可变性暂时超过了我们今天需要总结的内容,我后面会增补一个链接来补充总结。
- 浮点数(Double、Float): 浮点数用来表示带有小数部分的数字,例如 3.1415926
浮点数分为两种类型,Double和Float,他们都可以表示浮点数,区别在于Double类型的精度更高,代价呢也就是占用的内存更多,精度有多高?留到我们整整需要了解的时候再研究吧,我们需要了解的是:swift默认会为你选择Double类型。
- Bool: 布尔类型,用来表示 “真” 或者 “假”
Bool类型只有两个值,true和fase。Bool类型的值可以帮助我们来控制流程分支,否则恐怕我们只能写出线性执行的程序了。
有了这些基本类型我们就可以方便的为现实世界中的事物进行建模了,比方说我们来描绘一下一位同学的信息状况。
var name = "小明" // 姓名 为 ”小明“,使用了String
var age = 21 // 年纪 = 21 ,使用了 Int
var height = 175.5 // 身高 = 175.5,使用了 浮点数(Double)
var married = false // 婚姻状态 = false ,使用了 Bool 类型
2、类型安全
swift语言对类型的态度是非常“较真”的,有些语言确持有相反的态度,我们先看一下ruby语言对这个问题的处理方式
x = 10 // 先将变量x赋值一个整数
x = "Hello,World" // 现在将x重新赋值一个字符串,我们可以看到,赋值成功了
在面对用新的类型对x进行重新复制的时候,ruby表现出了”您随意“的宽容态度。我们继续看,我们对x进行一次数学运算操作会怎样。
x = 10
x = "Hello,World"
x = x - 1 // error !!!!!!
这时候ruby会毫不迟疑的抛出错误,态度是这样的:“这个错误和我可是没有关系的,完全是程序员自己赋值是类型弄错了”。这是宽容背后的残忍吗?
现在我们再看一下swift对同一个问题的态度,我们尝试将小明的年纪修改为一个字符串。
var age = 21
age = "Hello,World" // error !!!!!!
如果我们进尝试行这样的修改,那么我们会立刻得到swift编译器给我们的错误提示:“抱怨我们将一个String类型的值赋给一个Int类型的变量”。在ruby中可能会发生的错误,在swift中,绝对不允许,不允许。这就是swift对类型的态度。swift编译器会对类型进行严格的检查,明确每一个值所属的类型,禁止类型“错位”,把运行时错误降到最低。
3、类型推断
那么问题来了,swift是如何知道age是一个Int类型,而不是一个String类型的呢?这里swift使用了类型推断机制。当我们给age进行赋值21的时候,编译器会根据21的类型(Int),来推断出age的类型一定为Int类型。通常静态类型的语言会要求我们声明变量的时候,同时指明变量的类型,类型推断则是一种延时方式,允许我们将类型的确定延时到第一次赋值的时候。
4、显示声明
那我们是不是只有在变量赋值的时候才能确定一个变量的类型呢?当然不是了,swift同样为我们提供了显示声明的方式,允许我们在声明一个变量的时候就指定变量的类型。我们用显示声明的方式,从新描述一下小明的信息。
var name: String = "小明"
var age: Int = 21
var height: Double = 175.5
var married: Bool = false
显示声明时指定变量的类型的工作通常是重复又缺少意义的,swift为我们提供了类型推断机制,减轻我们编程的工作量,编译器越是聪明,我们的工作就会越轻松愉快。
网友评论