在本教程中,您将了解Swift编程语言支持的不同数据类型,并在创建变量或常量时使用它。
数据类型是变量或常量可以存储在其中的数据(值)的类型。例如,在文章Swift 变量和常量,您创建了一个变量和一个常量以将字符串数据存储在内存中。
该数据可以是文本/字符串(“ Hello”)或数字(12.45),也可以是位(0&1)。定义数据类型可确保仅存储定义的数据类型。
让我们看一个场景:
假设您要创建一个游戏。由于大多数游戏在游戏完成后都会显示高分和玩家姓名,因此您需要为游戏存储这两个数据。
高分(highScore)是数字(例如 59),玩家的名字(playerName)是字符串(例如 Jack)。您可以创建两个变量或常量来存储数据。
在Swift中,这可以通过将变量和数据类型声明为:
var highScore:Int = 59 var playerName:String = "Jack"
在这里,我们声明了Int类型的HighScore变量,它存储值59。 以及存储值Jack的字符串类型的playerName变量。
但是,如果您执行以下操作:
var highScore:Int = "Jack"
您将得到一个编译时错误,抛出 无法将'String'类型的值转换为指定的'Int'类型。
这是因为您声明了 highScore 来存储整数值,但在其中放置了字符串。这个错误确保 highScore 只能存储一个数字而不能存储玩家的名字。
数据类型的另一个重要部分是其大小。这指定了可以存储在给定变量或常量中的数据大小。
Type 的大小以位为单位进行度量,最多可以存储 2bits。如果你了解 Bit(位),可以把它想象成一个0或1的值。
因此,对于Type size = 1 bit,则它最多只能存储 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
对于位系统,它最多可以存储2 n个值。
下面列出了swift中最常用的数据类型:
声明为 Bool 类型的变量/常量只能存储两个值 true 或 false。
默认值:false
在处理if-else语句时经常使用它。可以参考文章 Swift if 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,因此,在屏幕上打印(highScore) output-100。
让我们来看看SWIFT中Int类型的一些变体。
可以存储正数和负数的整数类型的变体。
默认值:0
大小:8位
范围:-128 至 127
一个Int8整数可以总共存储2 8 =(256)个值。即它可以存储 0 到 255之间的数字。
但是由于 Int8 包括正数和负数,我们可以存储从-128到127的数字,包括0,总计为256个值或数字。
var highScore:Int8 = -128//正确 highScore = 127 //正确 highScore = 128 //错误 highScore = -129 //错误
您还可以使用 Swift函数 内置的.min和.max找出类型可以存储的最大和最小值。
示例3:最大和最小 Int8数据类型
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 //尝试执行以下操作时出现编译时错误
上面的代码将抛出编译时错误,因为无符号整数只能存储 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类型的变量/常量可以存储单字符字符串字面量。
您可以在Swift中使用转义序列\u{n}(Unicode字符,n为十六进制)将emoji或英语以外的语言作为字符。
let playerName:Character = "J" let playerNameWithUnicode:Character = "\u{134}" print(playerName) print(playerNameWithUnicode)
运行该程序时,输出为:
J ?
声明为String类型的变量或常量可以存储字符集合。
默认值:“”(空字符串)
它是值类型。
您可以使用for-in循环遍历字符串。参考Swift for-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中还有其他高级数据类型,例如 tuple,optional,range,class,structure 等。您将在后面的章节中学习。
1.由于 Swift 是一种类型推断语言,变量或常量可以从存储的值中自动推断类型。因此,您可以在创建变量或常量时跳过类型。然而,你可以考虑为了可读性而写类型,但不推荐这样做。
示例9:类型推断的变量/常量
let playerName = "Jack" print(playerName)
Swift编译器可以根据其值自动推断该变量为 String 类型。
2. Swift是一种类型安全的语言。如果将变量定义为某种类型,则以后不能使用其他数据类型进行更改。
示例10:Swift是一种类型安全的语言
let playerName:String playerName = 55 //compile time error
上面的代码将产生一个错误,因为我们已经指定变量playerName将为String。 因此我们无法在其中存储一个整数。