在使用任何程式設計語言進行程式設計時,都需要使用不同型別的變數來儲存資訊。 變數只是用於儲存值的保留記憶體位置。 這意味著在建立變數時,會在記憶體中保留一些空間。
您可能希望儲存各種資料型別的資訊,如字串,字元,寬字元,整數,浮點,布林值等。根據變數的資料型別,作業系統分配記憶體並決定可以在保留記憶體中儲存什麼型別的內容。
Swift 4為程式員提供了豐富的內建和使用者定義的資料型別。 在宣告變數時,最常見的是以下型別的基本資料型別 -
Int
或UInt
- 用於整數。 更具體地說,就是可以使用Int32
,Int64
來定義32
位或64
位有符號整數,而使用UInt32
或UInt64
來定義32
位或64
位無符號整數變數。 例如,42
和-23
。Float
- 用於表示32
位浮點數和小數點較小的數位。 例如,3.14159
,0.1
和-273.158
。Double
- 用於表示64
位浮點數,並在浮點值非常大時使用。 例如,3.14159
,0.1
和-273.158
。Bool
- 用於表示布林值,該值只有兩個:true
或false
。String
- 這是一個有序的字元集合。 例如,"Hello,World!"
,"Yii bai"
'C'
,'Y'
Optional
- 這表示可以包含值或不包含值的變數。下面列出了與整數型別相關的幾個要點 -
32
位平台上,Int
與Int32
的大小相同。64
位平台上,Int
與Int64
的大小相同。32
位平台上,UInt
與UInt32
的大小相同。64
位平台上,UInt
與UInt64
的大小相同。Int8
,Int16
,Int32
,Int64
可用於表示8
位,16
位,32
位和64
位有符號整數形式。UInt8
,UInt16
,UInt32
和UInt64
可用於表示無符號整數的8
位,16
位,32
位和64
位形式。下表顯示了變數型別,將值儲存在記憶體中所需的記憶體量,以及可以儲存在此類變數中的最大值和最小值。
型別 | 典型的位寬 | 典型範圍 |
---|---|---|
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 數位) |
Double |
8 位元組 |
2.3E-308 ~ 1.7E+308 (~15 數位) |
可以使用typealias
為現有型別建立新名稱。 以下是使用typealias
定義新型別的簡單語法 -
typealias newname = type
例如,以下行指示編譯器Feet
是Int
的另一個名稱 -
typealias Feet = Int
現在,以下宣告完全合法,並建立一個名為distance
的整數變數 -
typealias Feet = Int
var distance: Feet = 100
print(distance)
當使用playground 執行上述程式時,得到以下結果 -
100
Swift 4是一種型別安全的語言,這意味著如果程式碼的一部分需要一個String
型別,就不能錯誤地將它傳遞給Int。
由於Swift 4是型別安全的,它在編譯程式碼時執行型別檢查,並將任何不匹配的型別標記為錯誤。
var varA = 42
varA = "This is hello"
print(varA)
當編譯上面的程式時,它會產生以下編譯時錯誤。
main.swift:2:8: error: cannot assign value of type 'String' to type 'Int'
varA = "This is hello"
型別推斷使編譯器能夠在編譯程式碼時自動推斷出特定表示式的型別,只需檢查提供的值即可。 Swift 4使用型別推斷來計算出適當的型別,如下所示。
// varA is inferred to be of type Int
var varA = 42
print(varA)
// varB is inferred to be of type Double
var varB = 3.14159
print(varB)
// varC is also inferred to be of type Double
var varC = 3 + 0.14159
print(varC)
當使用playground 執行上述程式時,得到以下結果 -
42
3.14159
3.14159