Swift数据类型
虽然编写任何编程语言,需要使用不同的变量来存储各种信息。变量不过是保留的内存位置来存储值。这意味着,当创建一个变量,在内存中会保留一些空间。
可能喜欢像存储字符串,字符,宽字符,整数,浮点数,布尔等各种数据类型的信息。根据一个变量的数据类型,操作系统分配内存,并决定什么可以存储保留在存储器。
内置数据类型
Swift 为程序员提供内置以及用户定义的种类数据类型。 以下是声明变量使用最频繁的基本数据类型的列表:
-
Int 或 UInt - 这是用于整数。更具体地可以使用Int32,Int64来定义32或64位有符号整数,其中作为UInt32或UInt64用来定义32或64位无符号整数的变量。 For example, 42 and -23.
-
Float - 这是用来表示一个32位浮点数,一般用于使用较小的小数点数字。 例如:3.14159,0.1,和 -273.158。
-
Double - 这是用来表示一个64位浮点数,用于非常大的浮点值。 例如: 3.14159, 0.1, 和 -273.158.
-
Bool - 这代表一个布尔值,真或假。
-
String - 这是有序字符集合。例如, "Hello, World!"
-
Character - 这是一个单字符字符串。例如, "C"
-
Optional - 这表示可以容纳一个值或没有任何值的变量。
有下列有关整数类型要点:
- 在32位的平台上,Int 大小与 Int32 的大小相同。
- 在64位的平台上,Int 大小与 Int64 的大小相同。
- 在32位的平台上,UInt 的大小与 UInt32 的大小相同。
- 在 64 位的平台上,UInt 的大小与 UInt64 的大小相同。
- Int8, Int16, Int32, Int64 可以用来表示 8 Bit, 16 Bit, 32 Bit 和 64 Bit 形成有符号整数。
- UInt8, UInt16, UInt32 和 UInt64 可以用来表示 8 Bit, 16 Bit, 32 Bit 和 64 Bit 形成无符号整数。
绑定值
下表显示变量类型,需要多少内存存储此值在存储器中,在这种类型的变量可以存储最大值和最小值。
类型 | 典型的位宽 | 典型范围 |
---|---|---|
Int8 | 1byte | -127 ~ 127 |
UInt8 | 1byte | 0 ~ 255 |
Int32 | 4bytes | -2147483648 ~ 2147483647 |
UInt32 | 4bytes | 0 ~ 4294967295 |
Int64 | 8bytes | -9223372036854775808 ~ 9223372036854775807 |
UInt32 | 8bytes | 0 ~ 18446744073709551615 |
Float | 4bytes | 1.2E-38 to 3.4E+38 (~6 数字) |
Double | 8bytes | 2.3E-308 to 1.7E+308 (~15 数字) |
类型别名
可以从现有类型使用typealias创建一个新的名称。以下是使用简单 typealias 的语法来定义新类型:
typealias newname = type
例如,下面告诉编译器Feet 是 Int 的另一个名字:
typealias Feet = Int
现在,下面的声明是完全合法的,并创建一个整型变量为 distance:
import Cocoa typealias Feet = Int var distance: Feet = 100 println(distance)
当我们使用 playground 运行上面的程序,到以下结果。
100
类型安全
Swift 是一种安全的语言,这意味着,如果代码的一部分需要一个字符串, 那么不能错误地传递一个int。
由于 Swift 是类型安全的,当类型检查时它执行编译代码并标志类型不匹配的错误。
import Cocoa var varA = 42 varA = "This is hello" println(varA)
当我们编译上面的程序它产生以下编译时错误。
Playground execution failed: error: :6:6: error: cannot assign to 'let' value 'varA' varA = "This is hello"
类型推断
在它编译代码时,类型推断使编译器自动推导出特定表达式的类型, 简单地通过检查所提供的值。Swift 采用类型推断制定出合适的类型如下。
import Cocoa // varA is inferred to be of type Int var varA = 42 println(varA) // varB is inferred to be of type Double var varB = 3.14159 println(varB) // varC is also inferred to be of type Double var varC = 3 + 0.14159 println(varC)
当我们使用 playground 运行上面的程序,得到以下结果。
42 3.14159 3.14159