雖然編寫任何程式語言,需要使用不同的變數來儲存各種資訊。變數不過是保留的記憶體位置來儲存值。這意味著,當建立乙個變數,在記憶體中會保留一些空間。
可能喜歡像儲存字串,字元,寬字元,整數,浮點數,布林等各種資料型別的資訊。根據乙個變數的資料型別,作業系統分配記憶體,並決定什麼可以儲存保留在儲存器。
內建資料型別
swift 為程式設計師提供內建以及使用者定義的種類資料型別。 以下是宣告變數使用最頻繁的基本資料型別的列表:
int 或 uint - 這是用於整數。更具體地可以使用int32,int64來定義32或64位有符號整數,其中作為uint32或uint64用來定義32或64位無符號整數的變數。 for example, 42 and -23.
有下列有關整數型別要點:
uint8, uint16, uint32 和 uint64 可以用來表示 8 bit, 16 bit, 32 bit 和 64 bit 形成無符號整數。
繫結值下表顯示變數型別,需要多少記憶體儲存此值在儲存器中,在這種型別的變數可以儲存最大值和最小值。
型別別名
可以從現有型別使用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 fawww.cppcns.comiled: error: :6:6: error: cannot assign towww.cppcns.com '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 執行上面的程式,得到以下結果。
423.14159
3.14159
swift數字型別之間的轉換
swift數字型別之間的轉換swift是一種安全的語言,對於型別的檢查非常嚴格,不同型別之間不能隨便轉換。
一、整型之間的轉換
在c和objective-c等其他語言中,整型之間有兩種轉換方法:
從小範圍數到大範圍數轉換是自動的;
從大範圍數到小範圍數需要強制型別轉換,有可能造成資料精度的丟失。
而在swift中這兩種方法是行不通的,我們需要通過一些函式進行顯式地轉換,**如下:
複製** **如下:
let historyscore:uint8 = 90
let englishscore:uint16 = 130
let totalscore = historyscore + englishscore //錯誤 ①
let totalscore = uint16(historyscore) + englishscore //正確 ②
let totalscore = historyscore + uint8(englishscore) //正確 ③
上述**宣告和初始化了兩個常量historyscore和englishscore,我們把它們相加賦值給totalscore。如果採用第①行**實現相加,程式就會有編譯錯誤,原因是historyscore是uint8型別,而englishscore是uint16型別ydugczxg,它們之間不能轉換。
我們有兩種轉換方法。
一種是把uint8的historyscore轉換為uint16型別。由於是從小範圍數轉換為大範圍數,這種轉換是安全的。**第②行uint16(historyscore)就是正確的轉換方法。
另外一種是把uint16的englishscore轉換為uint8型別。由於是從大範圍數轉換為小範圍數,這種轉換是不安全的,如果轉換的數比較大會造成精度的丟失。**第③行uint8(englishscore)是正確的轉換方法。由於本例中englishscore的值是130,這個轉換是成功的,如果把這個數修改為1300,雖然程式編譯沒有問題,但是會在控制台中輸出異常資訊,這是執行期異常。
上述**中,uint16(historyscore)和uint8(englishscore)事實上是構造器,能夠建立並初始化另外乙個型別。二、整型與浮點型之間的轉換
整型與浮點型之間的轉換與整型之間的轉換類似,因此我們將上一節的示例修改如下:
複製** **如下:
let historyscore:float = 90.6 ①
let englishscore:uint16 = 130 ②
let totalscore = historyscore + englishscore //錯誤 ③
let totalscore = historyscore + float(englishscore) //正確,安全 ④
let totalscore = uint16(historyscore) + englishscore //正確,小數被截掉 ⑤
上述**經過了一些修改,第①行**historyscore變數型別是float型別。第②行**englishscore變數還是uint16型別。其中第③行**直接進行了計算,結果有編譯錯誤。第④行**是將uint16型別的englishscore變數轉換為float型別,這種轉換是最安全的。第⑤程式設計客棧行**是將float型別的historyscore變數轉換為uint16型別,這種轉換首先會導致小數被截掉,另外如果historyscore變數數很大,會導致執行期異常,這與整型之間的轉換是類似的。
本文標題: swift內建的數字型別及基本的轉換方法
本文位址:
基本內建型別
c 的基本內建型別包含空型別和算術型別。算術型別包含 字元型別 整型數 浮點值 布林值。算術型別分為兩大類 整型,包含字元和布林型別在內 浮點型。除了布林型別和擴充套件的字元型別之外,其它整型可以劃分為帶符號和無符號的。字元型分為三種 char signed char unsigned char。但...
數字型別內建方法
1.1 可變or不可變 二 浮點型內建方法 float 整型和浮點型統稱為數字型別。1.用途 年齡 號碼 等級 2.定義 可以使用int 方法將純數字的字串轉為十進位制的整型 copyage 19 age int 19 print type age copycopyx int 111 print t...
數字型別內建方法
目錄 二 浮點型內建方法 float age 19 age int 10 print type age x int 111 print type x x int 11.1 報錯 必須是純數字的字串才能強制型別轉換 print x id不變值可變,即在原值的基礎上修改,則為可變資料型別 值變id也變,...