在本教程中,您將了解Swift編程語言支持的不同數(shù)據(jù)類型,并在創(chuàng)建變量或常量時使用它。
數(shù)據(jù)類型是變量或常量可以存儲在其中的數(shù)據(jù)(值)的類型。例如,在文章Swift 變量和常量,您創(chuàng)建了一個變量和一個常量以將字符串?dāng)?shù)據(jù)存儲在內(nèi)存中。
該數(shù)據(jù)可以是文本/字符串(“ Hello”)或數(shù)字(12.45),也可以是位(0&1)。定義數(shù)據(jù)類型可確保僅存儲定義的數(shù)據(jù)類型。
讓我們看一個場景:
假設(shè)您要創(chuàng)建一個游戲。由于大多數(shù)游戲在游戲完成后都會顯示高分和玩家姓名,因此您需要為游戲存儲這兩個數(shù)據(jù)。
高分(highScore)是數(shù)字(例如 59),玩家的名字(playerName)是字符串(例如 Jack)。您可以創(chuàng)建兩個變量或常量來存儲數(shù)據(jù)。
在Swift中,這可以通過將變量和數(shù)據(jù)類型聲明為:
var highScore:Int = 59 var playerName:String = "Jack"
在這里,我們聲明了Int類型的HighScore變量,它存儲值59。 以及存儲值Jack的字符串類型的playerName變量。
但是,如果您執(zhí)行以下操作:
var highScore:Int = "Jack"
您將得到一個編譯時錯誤,拋出 無法將'String'類型的值轉(zhuǎn)換為指定的'Int'類型。
這是因為您聲明了 highScore 來存儲整數(shù)值,但在其中放置了字符串。這個錯誤確保 highScore 只能存儲一個數(shù)字而不能存儲玩家的名字。
數(shù)據(jù)類型的另一個重要部分是其大小。這指定了可以存儲在給定變量或常量中的數(shù)據(jù)大小。
Type 的大小以位為單位進(jìn)行度量,最多可以存儲 2bits。如果你了解 Bit(位),可以把它想象成一個0或1的值。
因此,對于Type size = 1 bit,則它最多只能存儲 2 1 = 2,兩個值:0 或 1。因此,字母程序的1位系統(tǒng)可以將0解釋為 a/0,將1解釋為 b/1.0。
0 -> a or 0 1 -> b or 1
同樣,兩位系統(tǒng)最多可以存儲2 2 = 4個值:(00,01,10,11),每個組合可以表示為:
00 -> a or 0 01 -> b or 1 11 -> c or 2 10 -> d or 3
對于位系統(tǒng),它最多可以存儲2 n個值。
下面列出了swift中最常用的數(shù)據(jù)類型:
聲明為 Bool 類型的變量/常量只能存儲兩個值 true 或 false。
默認(rèn)值:false
在處理if-else語句時經(jīng)常使用它??梢詤⒖嘉恼?Swift if else。
let result:Bool = true print(result)
運(yùn)行該程序時,輸出為:
true
聲明為整數(shù)類型的變量/常量可以存儲正數(shù)和負(fù)數(shù),包括零,沒有小數(shù)部分。
默認(rèn)值:0
大小:32/64位取決于平臺類型。
值范圍:-2,147,483,648 至 2,147,483,647(32位平臺)
-9223372036854775808 至 9223372036854775807(64位平臺)
還有很多 Integer 類型的變體,例如 UInt,Int8,Int16等。您最常用的是Int。
如果您需要指定變量/常量所能容納的整數(shù)的大小/類型,可以使用UInt、Int8、Int16等更具體地存儲它,我們將在下面介紹這些內(nèi)容。
var highScore:Int = 100 print(highScore) highScore = -100 print(highScore)
運(yùn)行該程序時,輸出為:
100 -100
在上面的示例中,我們聲明了一個類型為 Int 的變量 highScore。首先,我們將其賦值為100,因此 print (highScore)在屏幕上輸出100。
后來,我們使用賦值運(yùn)算符 highScore =-100 將值更改為 -100,因此,在屏幕上打印(highScore) output-100。
讓我們來看看SWIFT中Int類型的一些變體。
可以存儲正數(shù)和負(fù)數(shù)的整數(shù)類型的變體。
默認(rèn)值:0
大小:8位
范圍:-128 至 127
一個Int8整數(shù)可以總共存儲2 8 =(256)個值。即它可以存儲 0 到 255之間的數(shù)字。
但是由于 Int8 包括正數(shù)和負(fù)數(shù),我們可以存儲從-128到127的數(shù)字,包括0,總計為256個值或數(shù)字。
var highScore:Int8 = -128//正確 highScore = 127 //正確 highScore = 128 //錯誤 highScore = -129 //錯誤
您還可以使用 Swift函數(shù) 內(nèi)置的.min和.max找出類型可以存儲的最大和最小值。
示例3:最大和最小 Int8數(shù)據(jù)類型
print(Int8.min) print(Int8.max)
運(yùn)行該程序時,輸出為:
-128 127
整數(shù)類型的變體,稱為UInt(無符號整數(shù)),只能存儲無符號數(shù)字(正數(shù)或零)。
默認(rèn)值:0
大小:32/64位取決于平臺類型。
范圍:0 至 4294967295(32位平臺)
0 至 18446744073709551615(64位平臺)
示例4:UInt數(shù)據(jù)類型
var highScore:UInt = 100 highScore = -100 //嘗試執(zhí)行以下操作時出現(xiàn)編譯時錯誤
上面的代碼將拋出編譯時錯誤,因為無符號整數(shù)只能存儲 0 或 正值。嘗試在無符號整數(shù)中存儲負(fù)值會給您拋出一個錯誤。
聲明為浮點型的變量或常量可以存儲帶小數(shù)點或小數(shù)點的數(shù)字。
默認(rèn)值:0.0
大小:32位浮點數(shù)。
范圍:1.2 * 10 -38至3.4 * 10 38(?6位數(shù)字)
let highScore:Float = 100.232 print(highScore)
運(yùn)行該程序時,輸出為:
100.232
聲明為 Double 類型的變量/常量也將帶有小數(shù)點或小數(shù)點的數(shù)字存儲為 Float,但是比 Float 支持更大的小數(shù)點。
默認(rèn)值:0.0
大小:64位浮點數(shù)。(因此,Double類型的變量可以存儲帶小數(shù)或小數(shù)點大于Float支持的數(shù)字)
范圍:2.3×10 -308?1.7 * 10 308(?15位)
let highScore:Double = 100.232321212121 print(highScore)
運(yùn)行該程序時,輸出為:
100.232321212121
聲明為Character類型的變量/常量可以存儲單字符字符串字面量。
您可以在Swift中使用轉(zhuǎn)義序列\(zhòng)u{n}(Unicode字符,n為十六進(jìn)制)將emoji或英語以外的語言作為字符。
let playerName:Character = "J" let playerNameWithUnicode:Character = "\u{134}" print(playerName) print(playerNameWithUnicode)
運(yùn)行該程序時,輸出為:
J ?
聲明為String類型的變量或常量可以存儲字符集合。
默認(rèn)值:“”(空字符串)
它是值類型。
您可以使用for-in循環(huán)遍歷字符串。參考Swift for-in循環(huán)。
Swift還支持一些特殊的轉(zhuǎn)義序列以在字符串中使用它們。例如,
\0 (空字符),
\\ (一個普通的反斜杠\),
\t (制表符),
\v (垂直標(biāo)簽),
\r (回車),
\" (雙引號),
\' (單引號),和
\u{n} (unicode字符串,n以十六進(jìn)制表示)。
let playerName = "Jack" let playerNameWithQuotes = "\"Jack\"" let playerNameWithUnicode = "\u{134}ack" print(playerName) print(playerNameWithQuotes) print(playerNameWithUnicode)
運(yùn)行該程序時,輸出為:
Jack "Jack" ?ack
請參考Swift字符和字符串,以了解有關(guān)字符和字符串的聲明,操作和示例的更多信息。
除了這種數(shù)據(jù)類型外,Swift中還有其他高級數(shù)據(jù)類型,例如 tuple,optional,range,class,structure 等。您將在后面的章節(jié)中學(xué)習(xí)。
1.由于 Swift 是一種類型推斷語言,變量或常量可以從存儲的值中自動推斷類型。因此,您可以在創(chuàng)建變量或常量時跳過類型。然而,你可以考慮為了可讀性而寫類型,但不推薦這樣做。
示例9:類型推斷的變量/常量
let playerName = "Jack" print(playerName)
Swift編譯器可以根據(jù)其值自動推斷該變量為 String 類型。
2. Swift是一種類型安全的語言。如果將變量定義為某種類型,則以后不能使用其他數(shù)據(jù)類型進(jìn)行更改。
示例10:Swift是一種類型安全的語言
let playerName:String playerName = 55 //compile time error
上面的代碼將產(chǎn)生一個錯誤,因為我們已經(jīng)指定變量playerName將為String。 因此我們無法在其中存儲一個整數(shù)。