Swift 數據類型
在我們使用任何程序語言編程時,需要使用各種數據類型來存儲不同的信息。
變量的數據類型決定瞭如何將代表這些值的位存儲到計算機的內存中。 在聲明變量時也可指定它的數據類型。
所有變量都具有數據類型,以決定能夠存儲哪種數據。
內置數據類型
Swift 提供了非常豐富的數據類型,以下列出了常用了幾種數據類型:
Int
一般來說,你不需要專門指定整數的長度。 Swift提供了一個特殊的整數類型Int
,長度與當前平台的原生字長相同:
- 在32位平台上,
Int
和Int32
長度相同。 - 在64位平台上,
Int
和Int64
長度相同。
除非你需要特定長度的整數,一般來說使用Int
就夠了。 這可以提高代碼一致性和可複用性。 即使是在32位平台上, Int
可以存儲的整數範圍也可以達到-2,147,483,648
~ 2,147,483,647
,大多數時候這已經足夠大了。
UInt
Swift也提供了一個特殊的無符號類型UInt
,長度與當前平台的原生字長相同:
- 在32位平台上,
UInt
和UInt32
長度相同。 - 在64位平台上,
UInt
和UInt64
長度相同。
注意:
盡量不要使用UInt
,除非你真的需要存儲一個和當前平台原生字長相同的無符號整數。 除了這種情況,最好使用Int
,即使你要存儲的值已知是非負的。 統一使用Int
可以提高代碼的可複用性,避免不同類型數字之間的轉換,並且匹配數字的類型推斷,請參考類型安全和類型推斷 。
浮點數
浮點數是有小數部分的數字,比如3.14159
, 0.1
和-273.15
。
浮點類型比整數類型表示的範圍更大,可以存儲比Int
類型更大或者更小的數字。 Swift 提供了兩種有符號浮點數類型:
-
Double
表示64位浮點數。 當你需要存儲很大或者很高精度的浮點數時請使用此類型。 -
Float
表示32位浮點數。 精度要求不高的話可以使用此類型。
注意:
Double
精確度很高,至少有15位數字,而Float
最少只有6位數字。 選擇哪個類型取決於你的代碼需要處理的值的範圍。
布爾值
Swift 有一個基本的布爾(Boolean)類型,叫做Bool。 布爾值指邏輯上的值,因為它們只能是真或者假。 Swift 有兩個布爾常量,true和false。
字符串
字符串是字符的序列集合,例如:
"Hello, World!"
字符
字符指的是單個字母,例如:
"C"
可選類型
使用可選類型(optionals)來處理值可能缺失的情況。 可選類型表示有值或沒有值。數值範圍
下表顯示了不同變量類型內存的存儲空間,及變量類型的最大最小值:
類型 | 大小(字節) | 區間值 |
---|---|---|
Int8 | 1 字節 | -127 到127 |
UInt8 | 1 字節 | 0 到255 |
Int32 | 4 字節 | -2147483648 到2147483647 |
UInt32 | 4 字節 | 0 到4294967295 |
Int64 | 8 字節 | -9223372036854775808 到9223372036854775807 |
UInt64 | 8 字節 | 0 到18446744073709551615 |
Float | 4 字節 | 1.2E-38 到3.4E+38 (~6 digits) |
Double | 8 字節 | 2.3E-308 到1.7E+308 (~15 digits) |
類型別名
類型別名對當前的類型定義了另一個名字,類型別名通過使用typealias 關鍵字來定義。 語法格式如下:
typealias newname = type
例如以下定義了Int 的類型別名為Feet:
typealias Feet = Int
現在,我們可以通過別名來定義變量:
import Cocoa typealias Feet = Int var distance: Feet = 100 print(distance)
我們使用playground 執行以上程序,輸出結果為:
100
類型安全
Swift 是一個類型安全(type safe)的語言。
由於Swift 是類型安全的,所以它會在編譯你的代碼時進行類型檢查(type checks),並把不匹配的類型標記為錯誤。 這可以讓你在開發的時候儘早發現並修復錯誤。
import Cocoa var varA = 42 varA = "This is hello" print(varA)
以上程序,會在Xcode 中報錯:
error: cannot assign value of type 'String' to type 'Int' varA = "This is hello"
意思為不能將'String' 字符串賦值給'Int' 變量。
類型推斷
當你要處理不同類型的值時,類型檢查可以幫你避免錯誤。 然而,這並不是說你每次聲明常量和變量的時候都需要顯式指定類型。
如果你沒有顯式指定類型,Swift 會使用類型推斷(type inference)來選擇合適的類型。
例如,如果你給一個新常量賦值42並且沒有標明類型,Swift 可以推斷出常量類型是Int,因為你給它賦的初始值看起來像一個整數:
let meaningOfLife = 42 // meaningOfLife 会被推测为 Int 类型
同理,如果你沒有給浮點字面量標明類型,Swift 會推斷你想要的是Double:
let pi = 3.14159 // pi 会被推测为 Double 类型
當推斷浮點數的類型時,Swift 總是會選擇Double而不是Float。
如果表達式中同時出現了整數和浮點數,會被推斷為Double類型:
let anotherPi = 3 + 0.14159 // anotherPi 会被推测为 Double 类型
原始值3沒有顯式聲明類型,而表達式中出現了一個浮點字面量,所以表達式會被推斷為Double類型。
實例
import Cocoa // varA 会被推测为 Int 类型 var varA = 42 print(varA) // varB 会被推测为 Double 类型 var varB = 3.14159 print(varB) // varC 也会被推测为 Double 类型 var varC = 3 + 0.14159 print(varC)
執行以上代碼,輸出結果為:
42 3.14159 3.14159