【主要內容】
1.整型
2.浮點型
3.類型安全和類型推斷
4.數值型字面量
5.數值類型轉換
6. 類型別名
1、整型
1.1 整數和整型
編程語言中的整型是用來表示我們自然界中的整數。先來補習1下小學的知識,整數的概念:正整數、零、負整數統稱為整數。
依照有沒有符號可以分為兩種:1.有符號整數(正整數、零、負整數)2.無符號整數(正整數和零)
Swift提供了8,16,32和64位的有符號和無符號的整數類型,比如:8位無符號整數類型是UInt8,32位有符號整數類型Int32。
1.2 整型表示的范圍
Swift中提供了min和max屬性來訪問不同整數類型的最小值和最大值,比如8位無符號/有符號整型表示的最大值最小值,如圖:
1.3 Int類型
1般寫代碼的時候不需要專門制定整數類型的長度,Swift還提供了1個特殊的整數類型:Int,Int類型的長度取決于當前平臺的系統位數:
在32位平臺上Int類型就是32位,和Int32長度相同。
在64位平臺上Int類型就是64位,和Int64長度相同。
1.4 UInt類型
UInt類型和Int類型1樣,它的長度取決于當前平臺的系統位數。
注意:
開發中盡可能不要使用UInt類型,最好使用Int,即便你要貯存的值就是非負數。可以提高代碼的復用性,避免不同類型數字之間的轉換,并且匹配數字的類型推斷。
2、浮點型
浮點數就是帶有小數點的數字,比如常見的:3.14,0.618。Swift中提供了兩種浮點數類型:
Float 表示32位浮點數。精度要求不高的話使用此類型。
Double表示64位浮點數。當需要貯存很大或很高精度的浮點數的時候才使用此類型。
注意:
Double的精度可以到達小數點后最少15位數字,而Float只有小數點后6位。1般來講Float類型足夠用。
3、類型安全和類型推斷
Swift是1種類型安全(type safe)的語言。類型安全的語言可讓你清除的知道代碼要處理的值的類型。如果你的代碼需要傳遞的參數是String類型,那末你絕對不可能不謹慎船進入1個非String類型。
由于Swift是類型安全的,所以它會在編譯你的代碼時進行類型檢查(typy checks),并把不匹配的類型標記為毛病,這樣可讓你盡早的發現問題并修復。
當你要處理不同類型的值時,類型檢查可以幫你避免毛病。但是你沒必要每次聲明常量、變量的時候都顯示制定類型,如果沒有制定類型,Swift會使用類型推斷(type inference)幫你選擇適合的類型。原理就是檢查你的賦值便可。
雖然有類型推斷,但是Swift很少需要自己顯示聲明類型,這些工作交給編譯器去做就能夠了。
例如:
聲明1個沒有標注類型的常量money,賦值998,Swift可以推斷出常量的類型是Int,從下圖控制臺的信息可以得到論證:
如果你給變量、常量賦值了1個浮點類型的值,Swift會默許推斷為Double類型,如圖:
4、數值型字面量
1個整數的字面量可以被寫成以下幾種情勢:
1個10進制數,沒有前綴
1個2進制數,前綴是0b
1個8進制數,前綴是0o
1個106進制數,前綴是0x
比如:
浮點型字面量可以是10進制(沒有前綴)或106進制(前綴是0x)。小數點兩邊必須有最少1個10進制數字(或是106進制的數字)。10進制浮點數也能夠有1個可選的指數(exponent),通過大寫或小寫的e來制定,106進制浮點型數必須有1個指數,通過大寫或小寫的p來指定。
如果1個10進制數的指數為exp,那這個數相當于基數和10^exp的乘積:
1.25e2 表示1.25 × 10^2,等于125.0。
1.25e⑵表示1.25×10^⑵,等于0.0125。
如果1個106機制數的指數為exp,那這個數相當于基數和的2^exp的乘積:
0xFp2表示15×2^2,等于60.0.
0xFp⑵表示15×2^⑵,等于3.75。
下面的這些浮點字面量都等于10進制的12.1875:
數值類字面量可以包括額外的格式來增強可讀性。整數和浮點數都可以添加額外的零并且包括下劃線,其實不會影響字面量:
5、數值型類型轉換
在開發的時候,如果沒有明確說1定要聲明無符號整型(要求優化性能、減少內存占用等),請使用系統默許的Int類型。由于系統默許整數類型的字面量默許的類型推斷也是Int類型。
5.1 整數之間的轉換
不同的整數類型存儲的范圍不同,可以通過max和min屬性得到。Int類型可以存儲的數值范圍:⑴28~127,UInt類型存儲的數值范圍:0~255。如果超越了這個范圍系統在編譯的時候就會報錯:
上邊這兩個毛病就是說:你存儲的值溢出了當前這個類型所表示的范圍。
如果想要兩個不同整數類型的值進行操作的時候,必須要轉化成相同的類型:
5.2整數和浮點數轉換
整數和浮點數的轉換必須顯式指定類型:
浮點類型一樣可以轉換成整數類型:
注意:
數字類型的常量或變量進行運算,不同于數字字面量之間進行運算。數字字面量可以直接進行運算,比如3 + 0.1415,由于數字字面量本身沒有肯定的類型,但是數字類型常量、變量是會被編譯器推斷出具體類型的,只有類型相同才能進行運算。
6、類型別名
類型別名(type aliases)就是給現有的類型定義1個新的名字。跟OC里邊的typedef是類似。在Swift中你可使用typealias關鍵字來定義類型別名。平常在開發的時候偶爾也會用到但是不多。類型別名在蘋果的Api里邊大量的出現,特別是在1些地圖類、音視頻類等等的Api里邊,常常會給現有類型起1個更成心義的別名。
比如:在GCD里邊,如果想要某個線程延遲幾秒履行,你得先定義1個延遲時間dispatch_time_t ,你點擊進去查看Api就會發現其實它是UInt64類型:
下邊自己定義1個類型別名:
歡迎大家關注”芒果iOS“微信公眾賬號,芒果會常常為大家分享好的技術文章: