在使用任何編程語言進行編程時,都需要使用不同類型的變數來存儲資訊。 變數只是用於存儲值的保留記憶體位置。 這意味著在創建變數時,會在內存中保留一些空間。
您可能希望存儲各種數據類型的資訊,如字串,字元,寬字元,整數,浮點,布爾值等。根據變數的數據類型,操作系統分配記憶體並決定可以在保留記憶體中存儲什麼類型的內容。
1. 內置數據類型
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
位形式。
2. 界限值
下表顯示了變數類型,將值存儲在內存中所需的記憶體量,以及可以存儲在此類變數中的最大值和最小值。
類型 | 典型的位寬 | 典型範圍 |
---|---|---|
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 數字) |
3. 類型別名
可以使用typealias
為現有類型創建新名稱。 以下是使用typealias
定義新類型的簡單語法 -
typealias newname = type
例如,以下行指示編譯器Feet
是Int
的另一個名稱 -
typealias Feet = Int
現在,以下聲明完全合法,並創建一個名為distance
的整數變數 -
typealias Feet = Int
var distance: Feet = 100
print(distance)
當使用playground 運行上述程式時,得到以下結果 -
100
4. 類型安全
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"
5.類型推斷
類型推斷使編譯器能夠在編譯代碼時自動推斷出特定運算式的類型,只需檢查提供的值即可。 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