你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 芒果iOS開發之Swift教程02-Swift基本數據結構

芒果iOS開發之Swift教程02-Swift基本數據結構

編輯:IOS開發綜合

一、整型

1.1 整數和整型

編程語言中的整型是用來表示我們自然界中的整數。先來補習一下小學的知識,整數的概念:正整數、零、負整數統稱為整數。

按照有無符號可以分為兩種:1.有符號整數(正整數、零、負整數)2.無符號整數(正整數和零)

Swift提供了8,16,32和64位的有符號和無符號的整數類型,比如:8位無符號整數類型是UInt8,32位有符號整數類型Int32。

 

1.2 整型表示的范圍

Swift中提供了min和max屬性來訪問不同整數類型的最小值和最大值,比如8位無符號/有符號整型表示的最大值最小值,如圖:

\

 

1.3 Int類型

一般寫代碼的時候不需要專門制定整數類型的長度,Swift還提供了一個特殊的整數類型:Int,Int類型的長度取決於當前平台的系統位數:

在32位平台上Int類型就是32位,和Int32長度相同。

在64位平台上Int類型就是64位,和Int64長度相同。

 

1.4 UInt類型

UInt類型和Int類型一樣,它的長度取決於當前平台的系統位數。

注意:

開發中盡量不要使用UInt類型,最好使用Int,即使你要儲存的值就是非負數。可以提高代碼的復用性,避免不同類型數字之間的轉換,並且匹配數字的類型推斷。

 

二、浮點型

浮點數就是帶有小數點的數字,比如常見的:3.14,0.618。Swift中提供了兩種浮點數類型:

Float 表示32位浮點數。精度要求不高的話使用此類型。

Double表示64位浮點數。當需要儲存很大或者很高精度的浮點數的時候才使用此類型。

注意:

Double的精度可以達到小數點後至少15位數字,而Float只有小數點後6位。一般來說Float類型足夠用。

 

三、類型安全和類型推斷

Swift是一種類型安全(type safe)的語言。類型安全的語言可以讓你清除的知道代碼要處理的值的類型。如果你的代碼需要傳遞的參數是String類型,那麼你絕對不可能不小心船進入一個非String類型。

由於Swift是類型安全的,所以它會在編譯你的代碼時進行類型檢查(typy checks),並把不匹配的類型標記為錯誤,這樣可以讓你盡早的發現問題並修復。

當你要處理不同類型的值時,類型檢查可以幫你避免錯誤。但是你不必每次聲明常量、變量的時候都顯示制定類型,如果沒有制定類型,Swift會使用類型推斷(type inference)幫你選擇合適的類型。原理就是檢查你的賦值即可。

雖然有類型推斷,但是Swift很少需要自己顯示聲明類型,這些工作交給編譯器去做就可以了。

例如:

聲明一個沒有標注類型的常量money,賦值998,Swift可以推斷出常量的類型是Int,從下圖控制台的信息可以得到論證:

 

\

如果你給變量、常量賦值了一個浮點類型的值,Swift會默認推斷為Double類型,如圖:

\

 

四、數值型字面量

一個整數的字面量可以被寫成以下幾種形式:

一個十進制數,沒有前綴

一個二進制數,前綴是0b

一個八進制數,前綴是0o

一個十六進制數,前綴是0x

比如:

\

 

浮點型字面量可以是十進制(沒有前綴)或者十六進制(前綴是0x)。小數點兩邊必須有至少一個十進制數字(或者是十六進制的數字)。十進制浮點數也可以有一個可選的指數(exponent),通過大寫或者小寫的e來制定,十六進制浮點型數必須有一個指數,通過大寫或者小寫的p來指定。

如果一個十進制數的指數為exp,那這個數相當於基數和10^exp的乘積:

1.25e2 表示1.25 × 10^2,等於125.0。

1.25e-2表示1.25×10^-2,等於0.0125。

如果一個十六機制數的指數為exp,那這個數相當於基數和的2^exp的乘積:

0xFp2表示15×2^2,等於60.0.

0xFp-2表示15×2^-2,等於3.75。

下面的這些浮點字面量都等於十進制的12.1875:

 

let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0

 


數值類字面量可以包括額外的格式來增強可讀性。整數和浮點數都可以添加額外的零並且包含下劃線,並不會影響字面量:

 

let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1

 

五、數值型類型轉換

在開發的時候,如果沒有明確說一定要聲明無符號整型(要求優化性能、減少內存占用等),請使用系統默認的Int類型。因為系統默認整數類型的字面量默認的類型推斷也是Int類型。

5.1 整數之間的轉換

不同的整數類型存儲的范圍不同,可以通過max和min屬性得到。Int類型可以存儲的數值范圍:-128~127,UInt類型存儲的數值范圍:0~255。如果超出了這個范圍系統在編譯的時候就會報錯:

\

上邊這兩個錯誤就是說:你存儲的值溢出了當前這個類型所表示的范圍。

如果想要兩個不同整數類型的值進行操作的時候,必須要轉化成相同的類型:

 

let value1: UInt16 = 2_000
let value2: UInt8 = 1
let value3 = value1 + UInt16(value2)

value1是UInt16類型,value2是UInt8類型,需要先用SomeType(ofInitialValue)方法將value2轉化為UInt16類型的數再進行運算。

 

5.2整數和浮點數轉換

整數和浮點數的轉換必須顯式指定類型:

 

let integerValue = 7
let fValue = 3.14
let fNumber = Double(integerValue) + fValue
print("fNumber = \(fNumber)")

常量integerValue被轉換成了Double類型,這樣加號兩邊的數類型相同就可以進行運算。

 

浮點類型同樣可以轉換成整數類型:

 

let integerNum = Int(fValue)
print(integerNum)

當浮點類型轉換為整數類型的時候,浮點類型會丟失精度,只保存浮點類型的整數位。上邊integerNum輸出的值為3。

 

注意:

數字類型的常量或變量進行運算,不同於數字字面量之間進行運算。數字字面量可以直接進行運算,比如3 + 0.1415,因為數字字面量本身沒有確定的類型,但是數字類型常量、變量是會被編譯器推斷出具體類型的,只有類型相同才能進行運算。

 

六、類型別名

類型別名(type aliases)就是給現有的類型定義一個新的名字。跟OC裡邊的typedef是類似。在Swift中你可以使用typealias關鍵字來定義類型別名。平常在開發的時候偶爾也會用到但是不多。類型別名在蘋果的Api裡邊大量的出現,特別是在一些地圖類、音視頻類等等的Api裡邊,經常會給現有類型起一個更有意義的別名。

比如:在GCD裡邊,如果想要某個線程延遲幾秒執行,你得先定義一個延遲時間dispatch_time_t ,你點擊進去查看Api就會發現其實它是UInt64類型:

\

下邊自己定義一個類型別名:

 

typealias requestTimeOut = Int
var time:requestTimeOut = 10
time = 7
print(time)
print(requestTimeOut.max)

上邊的定義了一個請求超時時間的類型別名,那麼以前需要用到Int的地方就可以直接替換成requestTimeOut。

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved