Swift - 数据类型


使用任何编程语言进行编程时,都需要使用不同类型的变量来存储信息。变量只不过是用于存储值的保留内存位置。这意味着当您创建变量时,您会在内存中保留一些空间。

您可能喜欢存储各种数据类型的信息,如字符串、字符、宽字符、整数、浮点、布尔值等。操作系统根据变量的数据类型分配内存并决定保留的内容可以存储记忆。

内置数据类型

Swift 4 为程序员提供了丰富的内置数据类型以及用户定义的数据类型。声明变量时最常见的是以下类型的基本数据类型 -

  • Int 或 UInt - 用于整数。更具体地说,您可以使用 Int32、Int64 定义 32 或 64 位有符号整数,而使用 UInt32 或 UInt64 定义 32 或 64 位无符号整数变量。例如,42 和-23。

  • Float - 用于表示 32 位浮点数和小数点较小的数字。例如,3.14159、0.1 和 -273.158。

  • Double - 用于表示 64 位浮点数,并在浮点值必须非常大时使用。例如,3.14159、0.1 和 -273.158。

  • Bool - 这表示一个布尔值,可以是 true 也可以是 false。

  • 字符串- 这是字符的有序集合。例如,“你好,世界!”

  • 字符- 这是一个单字符字符串文字。例如,“C”

  • 可选- 这表示可以保存值或不保存值的变量。

  • 元组- 用于将多个值分组到单个复合值中。

我们在这里列出了与整数类型相关的一些要点 -

  • 在 32 位平台上,Int 的大小与 Int32 相同。

  • 在 64 位平台上,Int 的大小与 Int64 相同。

  • 在 32 位平台上,UInt 的大小与 UInt32 相同。

  • 在 64 位平台上,UInt 的大小与 UInt64 相同。

  • Int8、Int16、Int32、Int64 可用于表示 8 位、16 位、32 位和 64 位形式的有符号整数。

  • UInt8、UInt16、UInt32 和 UInt64 可用于表示 8 位、16 位、32 位和 64 位形式的无符号整数。

约束值

下表显示了变量类型、在内存中存储该值需要多少内存以及该类型变量可以存储的最大值和最小值是多少。

类型 典型位宽 典型范围
整型8 1字节 -127 至 127
UInt8 1字节 0 至 255
整数32 4字节 -2147483648 至 2147483647
UInt32 4字节 0 至 4294967295
整型64 8字节 -9223372036854775808 至 9223372036854775807
UInt64 8字节 0 至 18446744073709551615
漂浮 4字节 1.2E-38 至 3.4E+38(~6 位数字)
双倍的 8字节 2.3E-308 至 1.7E+308(约 15 位数字)

类型别名

您可以使用typealias为现有类型创建新名称。以下是使用 typealias 定义新类型的简单语法 -

typealias newname = type

例如,以下行指示编译器Feet是Int的另一个名称-

typealias Feet = Int

现在,以下声明是完全合法的,并创建一个名为距离的整数变量 -

typealias Feet = Int
var distance: Feet = 100
print(distance)

当我们使用 Playground 运行上述程序时,我们得到以下结果。

100

类型安全

Swift 4 是一种类型安全语言,这意味着如果代码的一部分需要 String,则不能错误地向其传递 Int。

由于 Swift 4 是类型安全的,因此它会在编译代码时执行类型检查,并将任何不匹配的类型标记为错误。

var varA = 42
varA = "This is hello"
print(varA)

当我们编译上面的程序时,它会产生以下编译时错误。

main.swift:2:8: error: cannot assign value of type 'String' to type 'Int'
varA = "This is hello"

类型推断

类型推断使编译器能够在编译代码时自动推断出特定表达式的类型,只需检查您提供的值即可。Swift 4 使用类型推断来计算出适当的类型,如下所示。

// varA is inferred to be of type Int
var varA = 42
print(varA)

// varB is inferred to be of type Double
var varB = 3.14159
print(varB)

// varC is also inferred to be of type Double
var varC = 3 + 0.14159
print(varC)

当我们使用 Playground 运行上述程序时,我们得到以下结果 -

42
3.14159
3.14159