Swift数据类型
精华
小牛编辑
105浏览
2023-03-14
在使用任何编程语言进行编程时,都需要使用不同类型的变量来存储信息。 变量只是用于存储值的保留内存位置。 这意味着在创建变量时,会在内存中保留一些空间。
您可能希望存储各种数据类型的信息,如字符串,字符,宽字符,整数,浮点,布尔值等。根据变量的数据类型,操作系统分配内存并决定可以在保留内存中存储什么类型的内容。
1. 内置数据类型
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
。String
- 这是一个有序的字符集合。 例如,"Hello,World!"
,"Yii bai"
- 字符 - 这是一个单字符字符串文字。 例如,
'C'
,'Y'
Optional
- 这表示可以包含值或不包含值的变量。- 元组 - 用于在单个复合值中对多个值进行分组。
下面列出了与整数类型相关的几个要点 -
- 在
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
位形式。
2. 界限值
下表显示了变量类型,将值存储在内存中所需的内存量,以及可以存储在此类变量中的最大值和最小值。
类型 | 典型的位宽 | 典型范围 |
---|---|---|
Int8 |
1 字节 |
-127 ~ 127 |
UInt8 |
1 字节 |
0 ~ 255 |
Int32 |
4 字节 |
-2147483648 ~ 2147483647 |
UInt32 |
4 字节 |
0 ~ 4294967295 |
Int64 |
8 字节 |
-9223372036854775808 ~ 9223372036854775807 |
UInt64 |
8 字节 |
0 ~ 18446744073709551615 |
Float |
4 字节 |
1.2E-38 ~ 3.4E+38 (~6 数字) |
Double |
8 字节 |
2.3E-308 ~ 1.7E+308 (~15 数字) |
3. 类型别名
可以使用typealias
为现有类型创建新名称。 以下是使用typealias
定义新类型的简单语法 -
typealias newname = type
例如,以下行指示编译器Feet
是Int
的另一个名称 -
typealias Feet = Int
现在,以下声明完全合法,并创建一个名为distance
的整数变量 -
typealias Feet = Int
var distance: Feet = 100
print(distance)
当使用playground 运行上述程序时,得到以下结果 -
100
4. 类型安全
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"
5.类型推断
类型推断使编译器能够在编译代码时自动推断出特定表达式的类型,只需检查提供的值即可。 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