Swift內建的數字型別及基本的轉換方法

2022-09-21 08:54:13 字數 3636 閱讀 1481

雖然編寫任何程式語言,需要使用不同的變數來儲存各種資訊。變數不過是保留的記憶體位置來儲存值。這意味著,當建立乙個變數,在記憶體中會保留一些空間。

可能喜歡像儲存字串,字元,寬字元,整數,浮點數,布林等各種資料型別的資訊。根據乙個變數的資料型別,作業系統分配記憶體,並決定什麼可以儲存保留在儲存器。

內建資料型別

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也變,...