数据类型是变量或常量可以存储在其中的数据(值)的类型。 例如,在文章 Swift 变量和常量中,您创建了一个变量和一个常量以将字符串数据存储在内存中。
该数据可以是文本/字符串("Hello"
)或数字(12.45),也可以是位(0 & 1
)。 定义数据类型可确保仅存储定义的数据类型。
让我们看一个场景:
假设您要创建一个游戏。 由于大多数游戏在游戏完成后都会显示高分和玩家姓名,因此您需要为游戏存储这两个数据。
高分是一个数字(例如 59),玩家的名字是一个字符串(例如 Jack)。 您可以创建两个变量或常量来存储数据。
在 Swift 中,这可以通过将变量和数据类型声明为:
var highScore:Int = 59
var playerName:String = "Jack"
在这里,我们声明了类型为Int
的highScore
变量,该变量存储了值 59。并且,类型为String
的playerName
变量,其存储了值Jack
。
但是,如果您执行以下操作:
var highScore:Int = "Jack"
您将得到一个编译时错误,指出无法将类型String
的值转换为指定的类型Int
。
这是因为您声明了highScore
存储整数值,但在其中放置了字符串。 此错误可确保highScore
仅能存储数字,而不能存储玩家的姓名。
数据类型的另一个重要部分是其大小。 这指定了可以存储在给定变量或常量中的数据大小。
类型的大小以位为单位进行测量,最多可以存储2^bit
的值。 如果您不了解bit
,请将其视为 0 或 1 的值。
因此,对于大小为 1 位的类型,它最多只能存储2^1 = 2
,两个值:0 或 1。所以 1 字母程序的位系统可以将 0 解释为a / 0
,将 1 解释为b / 1.0
。
0 -> a or 0
1 -> b or 1
同样,两位系统最多可以存储2^2 = 4
个值:(00,01,10,11
),每个组合可以表示为:
00 -> a or 0
01 -> b or 1
11 -> c or 2
10 -> d or 3
对于 n 位系统,它最多可以在其中存储2^n
值。
下面列出了 swift 中最常用的数据类型:
- 声明为
Bool
类型的变量/常量只能存储true
或false
两个值。 - 默认值:
false
- 当您使用
if-else
语句时,经常使用它。 Swiftif-else
文章将对此进行详细介绍。
let result:Bool = true
print(result)
运行该程序时,输出为:
true
- 声明为整数类型的变量/常数可以存储正整数和负整数,包括零且无小数部分。
- 默认值:0
- 大小:32/64 位取决于平台类型。
- 范围:-2,147,483,648 至 2,147,483,647(32 位平台) -9223372036854775808 至 9223372036854775807(64 位平台)
- 有很多
Integer
类型的变体,例如UInt
,Int8
,Int16
等。最常用的是Int
。 - 如果需要指定变量/常量可以容纳的整数的大小/类型,则可以使用
UInt
,Int8
和Int16
等更具体地存储它,我们将在下面进行探讨。
var highScore:Int = 100
print(highScore)
highScore = -100
print(highScore)
运行该程序时,输出为:
100
-100
在上面的示例中,我们声明了类型为Int
的变量highScore
。 首先,我们为其分配了一个值 100,因此print(highScore)
在屏幕上输出 100。
稍后,我们使用赋值运算符将highScore = -100
的值更改为-100,因此print(highScore)
在屏幕上输出 -100。
让我们探索 Swift 中Int
类型的一些变体。
- 可以存储正数和负数的整数类型的变体。
- 默认值:0
- 大小:8 位
- 范围:-128 至 127
一个Int8
整数可以总共存储2^8 = 256
个值。 即它可以存储 0 到 255 之间的数字,对不对?
是的,你是对的。 但是由于Int8
同时包含正数和负数,我们可以存储从 -128 到 127 的数字,其中包括 0,总计为 256 个值或数字。
var highScore:Int8 = -128//ok
highScore = 127 //ok
highScore = 128 // error here
highScore = -129 //error here
您还可以使用 Swift 函数内置的.min
和.max
找出类型可以存储的最高和最低值。
示例 3:Int8
数据类型的Max
和Min
print(Int8.min)
print(Int8.max)
运行该程序时,输出为:
-128
127
- 整数类型的变体,称为
UInt
(无符号整数),只能存储无符号数字(正数或零)。 - 默认值:0
- 大小:32/64 位取决于平台类型。
- 范围:0 至 4294967295(32 位平台) 0 至 18446744073709551615(64 位平台)
示例 4:UInt
数据类型
var highScore:UInt = 100
highScore = -100//compile time error when trying to
上面的代码将给您一个编译时错误,因为无符号整数只能存储 0 或正值。 尝试在无符号整数中存储负值会给您一个错误。
- 声明为浮点型的变量或常量可以存储带小数点或小数点的数字。
- 默认值:0.0
- 大小:32 位浮点数。
- 范围:
1.2 * 10^-38
至3.4 * 10^38
(~6
位数字)
let highScore:Float = 100.232
print(highScore)
运行该程序时,输出为:
100.232
- 声明为
Double
类型的变量/常量也将带小数点或小数点的数字存储为Float
,但比Float
支持的小数点大。 - 默认值:0.0
- 大小:64 位浮点数。 (因此,Double 类型的变量可以存储带小数或小数点大于 Float 支持的数字)
- 范围:
2.3 * 10^-308
至1.7 * 10^308
(~15
位数字)
let highScore:Double = 100.232321212121
print(highScore)
运行该程序时,输出为:
100.232321212121
- 声明为
Character
类型的变量/常量可以存储单字符字符串字面值。 - 您可以使用转义序列
\u{n}
(unicode 码点,n 为十六进制)在 Swift 中将表情符号或英语以外的其他语言作为字符包含在内。
let playerName:Character = "J"
let playerNameWithUnicode:Character = "\u{134}"
print(playerName)
print(playerNameWithUnicode)
运行该程序时,输出为:
J
Ĵ
- 声明为
String
类型的变量或常量可以存储字符集合。 - 默认值:
""
(空字符串) - 它是值类型。 请参见值和引用类型简介。
- 您可以使用
for-in
循环遍历字符串。 参见 Swiftfor-in
循环。 - Swift 还支持一些特殊的转义序列以在字符串中使用它们。 例如,
\0
(空字符),\\
(普通的反斜杠\),\t
(制表符),\v
(垂直标签),\r
(回车),\"
(双引号),\'
(单引号),以及\u{n}
(unicode 码点,n 为十六进制)。
let playerName = "Jack"
let playerNameWithQuotes = "\"Jack\""
let playerNameWithUnicode = "\u{134}ack"
print(playerName)
print(playerNameWithQuotes)
print(playerNameWithUnicode)
运行该程序时,输出为:
Jack
"Jack"
Ĵack
请参阅 Swift 字符和字符串,以了解有关字符和字符串的声明,操作和示例的更多信息。
除此数据类型外,Swift 中还有其他高级数据类型,例如元组,可选项,范围,类,结构等,您将在后面的章节中学习。
1.由于 Swift 是一种类型推断语言,因此变量或常量可以根据存储的值自动推断类型。 因此,您可以在创建变量或常量时跳过类型。 但是,出于可读性考虑,您可以考虑编写该类型,但不建议这样做。
示例 9:变量/常量的类型推断
let playerName = "Jack"
print(playerName)
Swift 编译器可以根据其值自动推断该变量为String
类型。
2. Swift 是一种类型安全的语言。 如果将变量定义为某种类型,则以后不能使用其他数据类型对其进行更改。
示例 10:Swift 是一种类型安全的语言
let playerName:String
playerName = 55 //compile time error
上面的代码将产生一个错误,因为我们已经指定变量playerName
将为String
。 因此我们无法在其中存储一个整数。