整型(Integers)
整型的全部都是数字而没有小数,例如42,-23,整型分有符号的(正数,零,负数)和无符号的(正数或者零)
Swift 提供基于8,16,32,64位的有符号和无符号的整型数。 这些整型遵行C语言的命名习惯,例如,一个8位的无符号整型使用UInt8,32位有符号的整型使用Int32,像Swift的所有数据类型一样,这些整型都是首字母大写。
整型边界(Integer Bounds)
我们能够访问每个整型类型的对小值和最大值,使用他们的min和max属性,如下:
let minValue = UInt8.min // minValue is equal to0,and is of type UInt8
let maxValue = UInt8.max // maxValue is equal to255,and is of type UInt8
这些属性的值具有对应的数据类型的大小(就像上面的UInt8的值),因此能够用在需要相应的数据类型的地方
整型(Int)
通常情况下,在我们的代码中不需要指定整型的大小,Swift提供了另外的一个整型类型Int,它的大小等于当前平台的一个字的大小(word size)
在32位的平台下,Int 大小就等同于Int32.
在64位的平台下,Int大小就等同于Int64
除非真的需要指定整型的大小。否则需要用整型的时候还是尽量使用Int,这增加了代码的一致性和兼容性。此外即使在32位平台,Int 能够存储在
-2,147,483,648到2,147,483,647之间的数字,对于大多数的整型数据的使用已经是很大了。
无符号整型(UInt)
Swift 也提供了一个无符号的整型类型UInt ,它的大小等于当前平台的一个字的大小(word size),如下
在32位平台下,UInt大小就等同于UInt32
在64位平台下,UInt大小就等同于UInt64
注意
仅仅当真的需要使用 具有当前平台字大小的无符号整型的时候才去使用UInt,否则即使知道被存储的值是非负的数值还是建议使用Int,一致性地使用Int用于整型避免了代码的转换操作,整型的数据类型(//猜测数据类型UInt32,UInt64等)猜测。详细表述在Type Safety and Type Inference
浮点数(Floating-Point Numbers)
浮点数是包含有小数的数值,例如3.12159,0.1,-273.15
浮点数能够用来表示比整型范围大的数值。存储的值可以比Int的值更小,或者更大,Swift提供了两种有符号的浮点数类型
Double 代表64位的浮点数,当浮点数很大或者精度要求非常高时使用Double。
Float 代表32位的浮点数。当精度要求不到64位精度时使用Float
注意
Double 有至少15位十进制数的精度,而Float有至少6位十进制数的精度,根据数值范围和现实的需要,在程序代码中选择合适的浮点数值。
数据类型的安全和推测(Type Safety and TypeInference)
Swift 是个数据类型安全的编程语言,类型安全使我们非常清楚我们代码所使用的数据的类型。如果我们的代码希望字符串,那么就不能错误的传入整型。
由于Swift是类型安全的,所以当编译代码的时候,编译器会检查代码并标记任何不匹配类型位错误。这就使我们在开发阶段能尽可能早地发现错误并修改错误。
当我们在使用了不正确的数据类型时类型检查能使我们避免了错误。然而这并不是说我们必须指定每个常量或者变量的数据类型。如果不指定数据类型的话,Swift使用类型推断(type inference)得出合适的数据类型,类型推断让编译器在编译时自动地推断特定的表达式的类。仅仅通过检查所给的数据的值。
因为类型推测,Swift需要比C,OC或其他语言更少的数据类型的显式声明,因为指定数据类型的工作已经被做了。
当用初始值声明一个常量或者变量时,类型推测是非常有用的。通常情况下是在声明一个常量或者变量时,把一个语意的值(literal value)赋给它 。(语意的值是在代码中直接出现的值,例如42或3.14159)。 如果你给一个新的常量赋值42而又没有说明它是什么类型,那么Swift会推测你想给这个变量赋值一个整型,因为你初始化这个变量时给的数值看起来像一个整型,如下:
let meaningOfLife = 42
//meaningOfLife is inferred to be of type Int
相似地,如果你不指定浮点语意的数据类型,Swift推测你想创建一个Double,如下:
let pi = 3.14159
//pi is inferred to be of type Double
Swift 总是选择Doule(而不是Float),当推测一个浮点型时
当表达式包含整型和浮点型时,Swift把表达式的结果推测为Double型,如下:
let anotherPi = 3 + 0.14159
// anotherPi is also inferred to be of type Double
上面数值3语意没有显式的类型,由于另一部分出现浮点型,所以表达式的最终数据类型被推测为Double,