Swift 資料類型


在我們使用任何程式語言程式設計時,需要使用各種資料類型來儲存不同的資訊。

變數的資料類型決定如何將代表這些值的位元儲存到電腦的記憶體中。在宣告變數時也可指定它的資料型態。

所有變數都具有資料類型,以決定能夠儲存哪種資料。


內建資料類型

Swift 提供了非常豐富的資料類型,以下列出了常用了幾種資料類型:

##Int

#一般來說,你不需要專門指定整數的長度。 Swift 提供了一個特殊的整數型別

Int,長度與目前平台的原生字長相同:

  • 在32位元平台上,

    IntInt32長度相同。

  • 在64位元平台上,

    IntInt64長度相同。

除非你需要特定長度的整數,一般來說使用

Int就夠了。這可以提高程式碼一致性和可重複使用性。即使在32位元平台上,Int可以儲存的整數範圍也可以達到-2,147,483,648~2,147,483,647,大多時候這已經夠大了。

UInt

Swift 也提供了一個特殊的無符號型別

UInt,長度與目前平台的原生字長相同:

  • 在32位元平台上,

    UIntUInt32長度相同。

  • 在64位元平台上,

    UIntUInt64長度相同。

注意:

盡量不要使用
UInt,除非你真的需要儲存一個和目前平台原生字長相同的無符號整數。除了這種情況,最好使用Int,即使你要儲存的值已知是非負的。統一使用Int可以提高程式碼的可重複使用性,避免不同類型數字之間的轉換,並且符合數字的類型推斷,請參考類型安全性和類型推斷。

浮點數

浮點數是有小數部分的數字,例如

3.141590.1-273.15

浮點類型比整數類型表示的範圍更大,可以儲存比

Int類型更大或更小的數字。 Swift 提供了兩種有符號浮點數類型:

  • Double表示64位元浮點數。當你需要儲存很大或很高精度的浮點數時請使用此類型。

  • Float表示32位元浮點數。精度要求不高的話可以使用此類型。

注意:


Double精確度很高,至少有15位數字,而Float最少只有6位數字。選擇哪個類型取決於你的程式碼需要處理的值的範圍。

布林值

Swift 有一個基本的布林(Boolean)類型,叫做Bool。布林值指邏輯上的值,因為它們只能是真或假。 Swift 有兩個布林常數,true和false。

字串

字串是字元的序列集合,例如:

"Hello, World!"

字元

字元指的是單一字母,例如:

"C"

可選類型

使用可選類型(optionals)來處理值可能缺少的情況。可選類型表示有值或沒有值。



數值範圍

#下表顯示了不同變數類型記憶體的儲存空間,及變數類型的最大最小值:

##8 位元組#4 位元組8 位元組
#類型大小(位元組)區間值
#Int8#1 位元組-127 到127
UInt81 位元組0 到255
#Int324 位元組-2147483648 到2147483647
UInt32#4 位元組# #0 到4294967295
Int648 位元組-9223372036854775808 至9223372036854775807
0 到18446744073709551615Float
1.2E-38 到3.4E+38 (~6 digits)Double
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