==========
在咱们应用任何程序语言编程时,须要应用各种数据类型来存储不同的信息。
变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在申明变量时也可指定它的数据类型。
所有变量都具备数据类型,以决定可能存储哪种数据。
内置数据类型
Swift 提供了十分丰盛的数据类型,以下列出了罕用了几种数据类型:
Int
一般来说,你不须要专门指定整数的长度。Swift 提供了一个非凡的整数类型Int
,长度与以后平台的原生字长雷同:
- 在 32 位平台上,
Int
和Int32
长度雷同。 - 在 64 位平台上,
Int
和Int64
长度雷同。
除非你须要特定长度的整数,一般来说应用 Int
就够了。这能够进步代码一致性和可复用性。即便是在 32 位平台上,Int
能够存储的整数范畴也能够达到-2,147,483,648
~2,147,483,647
,大多数时候这曾经足够大了。
UInt
Swift 也提供了一个非凡的无符号类型UInt
,长度与以后平台的原生字长雷同:
- 在 32 位平台上,
UInt
和UInt32
长度雷同。 - 在 64 位平台上,
UInt
和UInt64
长度雷同。
留神: 尽量不要应用
UInt
,除非你真的须要存储一个和以后平台原生字长雷同的无符号整数。除了这种状况,最好应用Int
,即便你要存储的值已知是非负的。对立应用Int
能够进步代码的可复用性,防止不同类型数字之间的转换,并且匹配数字的类型推断。
整数类型须要留神以下几点:
- 在 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 位的无符号整数模式。
浮点数:Float、Double
浮点数是有小数局部的数字,比方 3.14159
,0.1
和 -273.15
。
浮点类型比整数类型示意的范畴更大,能够存储比 Int
类型更大或者更小的数字。Swift 提供了两种有符号浮点数类型:
- Double 示意 64 位浮点数。当你须要存储很大或者很高精度的浮点数时请应用此类型。
- Float 示意 32 位浮点数。精度要求不高的话能够应用此类型。
留神:
Double
精确度很高,至多有 15 位数字,而Float
起码只有 6 位数字。抉择哪个类型取决于你的代码须要解决的值的范畴。
布尔值:Bool
Swift 有一个根本的布尔(Boolean)类型,叫做 Bool。布尔值指逻辑上的值,因为它们只能是真或者假。Swift 有两个布尔常量,true 和 false。
字符串:String
字符串是字符的序列汇合,例如:
“Hello, World!”
字符:Character
字符指的是单个字母,例如:
“C”
可选类型:Optional
应用可选类型来解决值可能缺失的状况。可选类型示意有值或没有值。
数值范畴
下表显示了不同变量类型内存的存储空间,及变量类型的最大最小值:
类型
大小(字节)
区间值
Int8
1 字节
-128 到 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 digits)
Double
8 字节
2.3E-308 到 1.7E+308 (~15 digits)
类型别名
类型别名对以后的类型定义了另一个名字,类型别名通过应用 typealias 关键字来定义。语法格局如下:
typealias newname = type
例如以下定义了 Int 的类型别名为 Feet:
typealias Feet = Int
当初,咱们能够通过别名来定义变量:
import Cocoa
typealias Feet = Int
var distance: Feet = 100
print(distance)
咱们应用 playground 执行以上程序,输入后果为:
100
类型平安
Swift 是一个类型平安(type safe)的语言。
因为 Swift 是类型平安的,所以它会在编译你的代码时进行类型查看(type checks),并把不匹配的类型标记为谬误。这能够让你在开发的时候尽早发现并修复谬误。
import Cocoa
var varA = 42
varA = “This is hello”
print(varA)
以上程序,会在 Xcode 中报错:
error: cannot assign value of type ‘String’ to type ‘Int’
varA = “This is hello”
意思为不能将 ‘String’ 字符串赋值给 ‘Int’ 变量。
类型推断
当你要解决不同类型的值时,类型查看能够帮你防止谬误。然而,这并不是说你每次申明常量和变量的时候都须要显式指定类型。
如果你没有显式指定类型,Swift 会应用类型推断(type inference)来抉择适合的类型。
例如,如果你给一个新常量赋值 42 并且没有表明类型,Swift 能够推断出常量类型是 Int,因为你给它赋的初始值看起来像一个整数:
let meaningOfLife = 42
// meaningOfLife 会被揣测为 Int 类型
同理,如果你没有给浮点字面量表明类型,Swift 会推断你想要的是 Double:
let pi = 3.14159
// pi 会被揣测为 Double 类型
当推断浮点数的类型时,Swift 总是会抉择 Double 而不是 Float。
如果表达式中同时呈现了整数和浮点数,会被推断为 Double 类型:
let anotherPi = 3 + 0.14159
// anotherPi 会被揣测为 Double 类型
原始值 3 没有显式申明类型,而表达式中呈现了一个浮点字面量,所以表达式会被推断为 Double 类型。
实例
import Cocoa
// varA 会被揣测为 Int 类型
var varA = 42
print(varA)
// varB 会被揣测为 Double 类型
var varB = 3.14159
print(varB)
// varC 也会被揣测为 Double 类型
var varC = 3 + 0.14159
print(varC)
执行以上代码,输入后果为:
42
3.14159
3.14159