Swift 資料型別(二)

weixin_34292287發表於2017-10-16

在我們使用任何程式語言程式設計時,需要使用各種資料型別來儲存不同的資訊。
變數的資料型別決定了如何將代表這些值的位儲存到計算機的記憶體中。在宣告變數時也可指定它的資料型別。
所有變數都具有資料型別,以決定能夠儲存哪種資料。
內建資料型別
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)來處理值可能缺失的情況。可選型別表示有值或沒有值。
數值範圍
下表顯示了不同變數型別記憶體的儲存空間,及變數型別的最大最小值:

4657618-e999ba450dd9f86d.png
螢幕快照 2017-10-16 20.54.50.png

型別別名
型別別名對當前的型別定義了另一個名字,型別別名通過使用 typealias 關鍵字來定義。語法格式如下:
typealias newname = type
例如以下定義了 Int 的型別別名為 Feet:
typealias Feet = Int
現在,我們可以通過別名來定義變數:

  import Foundation
  typealias YLInt = Int
  let state : YLInt = 1
  print(state)

我們使用 playground 執行以上程式,輸出結果為:
1
型別安全
Swift 是一個型別安全(type safe)的語言。
由於 Swift 是型別安全的,所以它會在編譯你的程式碼時進行型別檢查(type checks),並把不匹配的型別標記為錯誤。這可以讓你在開發的時候儘早發現並修復錯誤。

var a = 10
a = "hello Swift"
print(a)

以上程式,會在 Xcode 中報錯:
error: cannot assign value of type 'String' to type 'Int'
a = "hello Swift"

意思為不能將 '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型別。
例項

// 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

程式碼戳這裡

相關文章