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