Swift的基本類型都是結(jié)構(gòu)體,擁有自己的函數(shù),故不能直接進(jìn)行運(yùn)算,我們可以重載運(yùn)算符來實(shí)現(xiàn)我們的需求
1. 內(nèi)置數(shù)據(jù)類型
Swift 提供了非常豐富的數(shù)據(jù)類型,以下列出了常用了幾種數(shù)據(jù)類型:
Int
一般來說,你不需要專門指定整數(shù)的長度。Swift 提供了一個(gè)特殊的整數(shù)類型Int,長度與當(dāng)前平臺的原生字長相同:
- 在32位平臺上,
Int和Int32長度相同。 - 在64位平臺上,
Int和Int64長度相同。
除非你需要特定長度的整數(shù),一般來說使用Int就夠了。這可以提高代碼一致性和可復(fù)用性。即使是在32位平臺上,Int可以存儲的整數(shù)范圍也可以達(dá)到-2,147,483,648~2,147,483,647,大多數(shù)時(shí)候這已經(jīng)足夠大了。
UInt
Swift 也提供了一個(gè)特殊的無符號類型UInt,長度與當(dāng)前平臺的原生字長相同:
- 在32位平臺上,
UInt和UInt32長度相同。 - 在64位平臺上,
UInt和UInt64長度相同。
注意: 盡量不要使用
UInt,除非你真的需要存儲一個(gè)和當(dāng)前平臺原生字長相同的無符號整數(shù)。除了這種情況,最好使用Int,即使你要存儲的值已知是非負(fù)的。統(tǒng)一使用Int可以提高代碼的可復(fù)用性,避免不同類型數(shù)字之間的轉(zhuǎn)換,并且匹配數(shù)字的類型推斷。
整數(shù)類型需要注意以下幾點(diǎn):
在 32 位系統(tǒng)上, Int 和 Int32 長度相同。
在 64 位系統(tǒng)上, Int 和 Int64 長度相同。
在 32 位系統(tǒng)上, UInt 和 UInt32 長度相同。
在 64 位系統(tǒng)上, UInt 和 UInt64 長度相同。
Int8, Int16, Int32, Int64 分別表示 8 位, 16 位, 32 位, 和 64 位的有符號整數(shù)形式。
UInt8, UInt16, UInt32, UInt64 分別表示 8 位, 16 位, 32 位 和 64 位的無符號整數(shù)形式。
浮點(diǎn)數(shù):Float、Double
浮點(diǎn)數(shù)是有小數(shù)部分的數(shù)字,比如 3.14159,0.1 和 -273.15。
浮點(diǎn)類型比整數(shù)類型表示的范圍更大,可以存儲比 Int 類型更大或者更小的數(shù)字。Swift 提供了兩種有符號浮點(diǎn)數(shù)類型:
- Double 表示64位浮點(diǎn)數(shù)。當(dāng)你需要存儲很大或者很高精度的浮點(diǎn)數(shù)時(shí)請使用此類型。
- Float 表示32位浮點(diǎn)數(shù)。精度要求不高的話可以使用此類型。
注意:
Double精確度很高,至少有15位數(shù)字,而Float最少只有6位數(shù)字。選擇哪個(gè)類型取決于你的代碼需要處理的值的范圍。
布爾值:Bool
Swift 有一個(gè)基本的布爾(Boolean)類型,叫做 Bool。布爾值指邏輯上的值,因?yàn)樗鼈冎荒苁钦婊蛘呒佟wift 有兩個(gè)布爾常量,true 和 false。
字符串:String
字符串是字符的序列集合,例如:
"Hello, World!"
字符:Character
字符指的是單個(gè)字母,例如:
'C'
可選類型:Optional
使用可選類型來處理值可能缺失的情況??蛇x類型表示有值或沒有值。
數(shù)值范圍
下表顯示了不同變量類型內(nèi)存的存儲空間,及變量類型的最大最小值:
| 類型 | 大?。ㄗ止?jié)) | 區(qū)間值 |
|---|---|---|
| Int8 | 1 字節(jié) | -128 到 127 |
| UInt8 | 1 字節(jié) | 0 到 255 |
| Int32 | 4 字節(jié) | -2147483648 到 2147483647 |
| UInt32 | 4 字節(jié) | 0 到 4294967295 |
| Int64 | 8 字節(jié) | -9223372036854775808 到 9223372036854775807 |
| UInt64 | 8 字節(jié) | 0 到 18446744073709551615 |
| Float | 4 字節(jié) | 1.2E-38 到 3.4E+38 (~6 digits) |
| Double | 8 字節(jié) | 2.3E-308 到 1.7E+308 (~15 digits) |
類型別名
類型別名對當(dāng)前的類型定義了另一個(gè)名字,類型別名通過使用 typealias 關(guān)鍵字來定義。語法格式如下:
typealias newname = type
類型安全
Swift 是一個(gè)類型安全的語言。
由于 Swift 是類型安全的,所以它會在編譯你的代碼時(shí)進(jìn)行類型檢查,并把不匹配的類型標(biāo)記為錯誤。這可以讓你在開發(fā)的時(shí)候盡早發(fā)現(xiàn)并修復(fù)錯誤。
var varA = 42
varA = "This is hello"
print(varA)
以上程序,會在 Xcode 中報(bào)錯:
error: cannot assign value of type 'String' to type 'Int'
varA = "This is hello"
意思為不能將 String字符串賦值給Int 變量。
類型推斷
當(dāng)你要處理不同類型的值時(shí),類型檢查可以幫你避免錯誤。然而,這并不是說你每次聲明常量和變量的時(shí)候都需要顯式指定類型。
如果你沒有顯式指定類型,Swift 會使用類型推斷來選擇合適的類型。
例如,如果你給一個(gè)新常量賦值42并且沒有標(biāo)明類型,Swift 可以推斷出常量類型是Int,因?yàn)槟憬o它賦的初始值看起來像一個(gè)整數(shù):
let meaningOfLife = 42
// meaningOfLife 會被推測為 Int 類型
同理,如果你沒有給浮點(diǎn)字面量標(biāo)明類型,Swift 會推斷你想要的是Double:
let pi = 3.14159
// pi 會被推測為 Double 類型
當(dāng)推斷浮點(diǎn)數(shù)的類型時(shí),Swift 總是會選擇Double而不是Float。
如果表達(dá)式中同時(shí)出現(xiàn)了整數(shù)和浮點(diǎn)數(shù),會被推斷為Double類型:
let anotherPi = 3 + 0.14159
// anotherPi 會被推測為 Double 類型
原始值3沒有顯式聲明類型,而表達(dá)式中出現(xiàn)了一個(gè)浮點(diǎn)字面量,所以表達(dá)式會被推斷為Double類型。
實(shí)例
// varA 會被推測為 Int 類型
var varA = 42
print(varA)
// varB 會被推測為 Double 類型
var varB = 3.14159
print(varB)
// varC 也會被推測為 Double 類型
var varC = 3 + 0.14159
print(varC)
執(zhí)行以上代碼,輸出結(jié)果為:
42
3.14159
3.14159