原文: https://www.programiz.com/swift-programming/data-types

在本教程中,您将了解 Swift 编程语言支持的不同数据类型,并在创建变量或常量时使用它。

数据类型是变量或常量可以存储在其中的数据(值)的类型。 例如,在文章 Swift 变量和常量中,您创建了一个变量和一个常量以将字符串数据存储在内存中。

该数据可以是文本/字符串("Hello")或数字(12.45),也可以是位(0 & 1)。 定义数据类型可确保仅存储定义的数据类型。

让我们看一个场景

假设您要创建一个游戏。 由于大多数游戏在游戏完成后都会显示高分和玩家姓名,因此您需要为游戏存储这两个数据。

高分是一个数字(例如 59),玩家的名字是一个字符串(例如 Jack)。 您可以创建两个变量或常量来存储数据。

在 Swift 中,这可以通过将变量和数据类型声明为:

  1. var highScore:Int = 59
  2. var playerName:String = "Jack"

在这里,我们声明了类型为InthighScore变量,该变量存储了值 59。并且,类型为StringplayerName变量,其存储了值Jack

但是,如果您执行以下操作:

  1. 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

  1. 0 -> a or 0
  2. 1 -> b or 1

同样,两位系统最多可以存储2^2 = 4个值:(00,01,10,11),每个组合可以表示为:

  1. 00 -> a or 0
  2. 01 -> b or 1
  3. 11 -> c or 2
  4. 10 -> d or 3

对于 n 位系统,它最多可以在其中存储2^n值。


Swift 数据类型

下面列出了 swift 中最常用的数据类型:

Bool

  • 声明为Bool类型的变量/常量只能存储truefalse两个值。
  • 默认值false
  • 当您使用if-else语句时,经常使用它。 Swift if-else文章将对此进行详细介绍。

示例 1:Bool数据类型

  1. let result:Bool = true
  2. print(result)

运行该程序时,输出为:

  1. true

Int

  • 声明为整数类型的变量/常数可以存储正整数和负整数,包括零且无小数部分。
  • 默认值:0
  • 大小:32/64 位取决于平台类型。
  • 范围:-2,147,483,648 至 2,147,483,647(32 位平台)
    -9223372036854775808 至 9223372036854775807(64 位平台)
  • 有很多Integer类型的变体,例如UIntInt8Int16等。最常用的是Int
  • 如果需要指定变量/常量可以容纳的整数的大小/类型,则可以使用UIntInt8Int16等更具体地存储它,我们将在下面进行探讨。

示例 2:Int数据类型

  1. var highScore:Int = 100
  2. print(highScore)
  3. highScore = -100
  4. print(highScore)

运行该程序时,输出为:

  1. 100
  2. -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 个值或数字。

  1. var highScore:Int8 = -128//ok
  2. highScore = 127 //ok
  3. highScore = 128 // error here
  4. highScore = -129 //error here

您还可以使用 Swift 函数内置的.min.max找出类型可以存储的最高和最低值。

示例 3:Int8数据类型的MaxMin

  1. print(Int8.min)
  2. print(Int8.max)

运行该程序时,输出为:

  1. -128
  2. 127

UInt

  • 整数类型的变体,称为UInt(无符号整数),只能存储无符号数字(正数或零)。
  • 默认值:0
  • 大小:32/64 位取决于平台类型。
  • 范围:0 至 4294967295(32 位平台)
    0 至 18446744073709551615(64 位平台)

示例 4:UInt数据类型

  1. var highScore:UInt = 100
  2. highScore = -100//compile time error when trying to

上面的代码将给您一个编译时错误,因为无符号整数只能存储 0 或正值。 尝试在无符号整数中存储负值会给您一个错误。


Float

  • 声明为浮点型的变量或常量可以存储带小数点或小数点的数字。
  • 默认值:0.0
  • 大小:32 位浮点数。
  • 范围1.2 * 10^-383.4 * 10^38~6位数字)

示例 5:Float数据类型

  1. let highScore:Float = 100.232
  2. print(highScore)

运行该程序时,输出为:

  1. 100.232

Double

  • 声明为Double类型的变量/常量也将带小数点或小数点的数字存储为Float,但比Float支持的小数点大。
  • 默认值:0.0
  • 大小:64 位浮点数。 (因此,Double 类型的变量可以存储带小数或小数点大于 Float 支持的数字)
  • 范围2.3 * 10^-3081.7 * 10^308~15位数字)

示例 6:Double数据类型

  1. let highScore:Double = 100.232321212121
  2. print(highScore)

运行该程序时,输出为:

  1. 100.232321212121

Character

  • 声明为Character类型的变量/常量可以存储单字符字符串字面值。
  • 您可以使用转义序列\u{n}(unicode 码点,n 为十六进制)在 Swift 中将表情符号或英语以外的其他语言作为字符包含在内。

示例 7:Character数据类型

  1. let playerName:Character = "J"
  2. let playerNameWithUnicode:Character = "\u{134}"
  3. print(playerName)
  4. print(playerNameWithUnicode)

运行该程序时,输出为:

  1. J
  2. Ĵ

String

  • 声明为String类型的变量或常量可以存储字符集合。
  • 默认值""(空字符串)
  • 它是值类型。 请参见值和引用类型简介
  • 您可以使用for-in循环遍历字符串。 参见 Swift for-in循环
  • Swift 还支持一些特殊的转义序列以在字符串中使用它们。 例如,

    • \0(空字符),
    • \\(普通的反斜杠\),
    • \t(制表符),
    • \v(垂直标签),
    • \r(回车),
    • \"(双引号),
    • \'(单引号),以及
    • \u{n}(unicode 码点,n 为十六进制)。

示例 8:String数据类型

  1. let playerName = "Jack"
  2. let playerNameWithQuotes = "\"Jack\""
  3. let playerNameWithUnicode = "\u{134}ack"
  4. print(playerName)
  5. print(playerNameWithQuotes)
  6. print(playerNameWithUnicode)

运行该程序时,输出为:

  1. Jack
  2. "Jack"
  3. Ĵack

请参阅 Swift 字符和字符串,以了解有关字符和字符串的声明,操作和示例的更多信息。

除此数据类型外,Swift 中还有其他高级数据类型,例如元组可选项范围结构等,您将在后面的章节中学习。


要记住的事情

1.由于 Swift 是一种类型推断语言,因此变量或常量可以根据存储的值自动推断类型。 因此,您可以在创建变量或常量时跳过类型。 但是,出于可读性考虑,您可以考虑编写该类型,但不建议这样做。

示例 9:变量/常量的类型推断

  1. let playerName = "Jack"
  2. print(playerName)

Swift 编译器可以根据其值自动推断该变量为String类型。

  1. Swift 是一种类型安全的语言。 如果将变量定义为某种类型,则以后不能使用其他数据类型对其进行更改。

示例 10:Swift 是一种类型安全的语言

  1. let playerName:String
  2. playerName = 55 //compile time error

上面的代码将产生一个错误,因为我们已经指定变量playerName将为String。 因此我们无法在其中存储一个整数。