位置:首頁 > 高級語言 > Swift教學 > Swift數據類型

Swift數據類型

雖然編寫任何編程語言,需要使用不同的變量來存儲各種信息。變量不過是保留的內存位置來存儲值。這意味著,當創建一個變量,在內存中會保留一些空間。

可能喜歡像存儲字符串,字符,寬字符,整數,浮點數,布爾等各種數據類型的信息。根據一個變量的數據類型,操作係統分配內存,並決定什麼可以存儲保留在存儲器。

內置數據類型

Swift 為程序員提供內置以及用戶定義的種類數據類型。 以下是聲明變量使用最頻繁的基本數據類型的列表:

  • Int 或 UInt - 這是用於整數。更具體地可以使用Int32,Int64來定義32或64位有符號整數,其中作為UInt32或UInt64用來定義32或64位無符號整數的變量。 For example, 42 and -23.

  • Float - 這是用來表示一個32位浮點數,一般用於使用較小的小數點數字。 例如:3.14159,0.1,和 -273.158。

  • Double - 這是用來表示一個64位浮點數,用於非常大的浮點值。  例如: 3.14159, 0.1, 和 -273.158.

  • Bool - 這代表一個布爾值,真或假。

  • String - 這是有序字符集合。例如, "Hello, World!"

  • Character - 這是一個單字符字符串。例如, "C"

  • Optional - 這表示可以容納一個值或冇有任何值的變量。

有下列有關整數類型要點:

  • 在32位的平台上,Int 大小與 Int32 的大小相同。
  • 在64位的平台上,Int 大小與 Int64 的大小相同。
  • 在32位的平台上,UInt 的大小與 UInt32 的大小相同。
  • 在 64 位的平台上,UInt 的大小與 UInt64 的大小相同。
  • Int8, Int16, Int32, Int64 可以用來表示 8 Bit, 16 Bit, 32 Bit 和 64 Bit 形成有符號整數。
  • UInt8, UInt16, UInt32 和 UInt64 可以用來表示 8 Bit, 16 Bit, 32 Bit 和 64 Bit 形成無符號整數。

綁定值

下表顯示變量類型,需要多少內存存儲此值在存儲器中,在這種類型的變量可以存儲最大值和最小值。

類型 典型的位寬 典型範圍
Int8 1byte -127 ~ 127
UInt8 1byte 0 ~ 255
Int32 4bytes -2147483648 ~ 2147483647
UInt32 4bytes 0 ~ 4294967295
Int64 8bytes -9223372036854775808 ~ 9223372036854775807
UInt32 8bytes 0 ~ 18446744073709551615
Float 4bytes 1.2E-38 to 3.4E+38 (~6 數字)
Double 8bytes 2.3E-308 to 1.7E+308 (~15 數字)

類型彆名

可以從現有類型使用typealias創建一個新的名稱。以下是使用簡單 typealias 的語法來定義新類型:

typealias newname = type

例如,下麵告訴編譯器Feet 是 Int 的另一個名字:

typealias Feet = Int

現在,下麵的聲明是完全合法的,並創建一個整型變量為 distance:

import Cocoa

typealias Feet = Int
var distance: Feet = 100
println(distance)

當我們使用 playground 運行上麵的程序,到以下結果。

100

類型安全

Swift 是一種安全的語言,這意味著,如果代碼的一部分需要一個字符串, 那麼不能錯誤地傳遞一個int。

由於 Swift 是類型安全的,當類型檢查時它執行編譯代碼並標誌類型不匹配的錯誤。

import Cocoa

var varA = 42
varA = "This is hello"
println(varA)

當我們編譯上麵的程序它產生以下編譯時錯誤。

Playground execution failed: error: :6:6: error: cannot assign to 'let' value 'varA'
varA = "This is hello"

類型推斷

在它編譯代碼時,類型推斷使編譯器自動推導出特定表達式的類型, 簡單地通過檢查所提供的值。Swift 采用類型推斷製定出合適的類型如下。

import Cocoa

// varA is inferred to be of type Int
var varA = 42
println(varA)

// varB is inferred to be of type Double
var varB = 3.14159
println(varB)

// varC is also inferred to be of type Double
var varC = 3 + 0.14159
println(varC)

當我們使用 playground 運行上麵的程序,得到以下結果。

42
3.14159
3.14159