Swift數字類型之間的轉換

Swift數字類型之間的轉換Swift是一種安全的語言,對於類型的檢查很是嚴格,不一樣類型之間不能隨便轉換。
1、整型之間的轉換
在C和Objective-C等其餘語言中,整型之間有兩種轉換方法:
從小範圍數到大範圍數轉換是自動的;
從大範圍數到小範圍數須要強制類型轉換,有可能形成數據精度的丟失。
而在Swift中這兩種方法是行不通的,咱們須要經過一些函數進行顯式地轉換,代碼以下:
php

[html] view plaincopyhtml

 

  1. let historyScore:UInt8 = 90  swift

  2.   

  3.   

  4. let englishScore:UInt16 = 130  安全

  5.   

  6.   

  7. let totalScore = historyScore + englishScore  //錯誤  ①  微信

  8.   

  9.   

  10. let totalScore = UInt16(historyScore) + englishScore   //正確 ②  函數

  11.   

  12.   

  13. let totalScore = historyScore + UInt8(englishScore)  //正確   ③  網站



上述代碼聲明和初始化了兩個常量historyScore和englishScore,咱們把它們相加賦值給totalScore。若是採用第①行代碼實現相加,程序就會有編譯錯誤,緣由是historyScore是UInt8類型,而englishScore是UInt16類型,它們之間不能轉換。
咱們有兩種轉換方法。
一種是把UInt8的historyScore轉換爲UInt16類型。因爲是從小範圍數轉換爲大範圍數,這種轉換是安全的。代碼第②行UInt16(historyScore)就是正確的轉換方法。
另一種是把UInt16的englishScore轉換爲UInt8類型。因爲是從大範圍數轉換爲小範圍數,這種轉換是不安全的,若是轉換的數比較大會形成精度的丟失。代碼第③行UInt8(englishScore)是正確的轉換方法。因爲本例中englishScore的值是130,這個轉換是成功的,若是把這個數修改成1300,雖然程序編譯沒有問題,可是會在控制檯中輸出異常信息,這是運行期異常。
上述代碼中,UInt16(historyScore)和UInt8(englishScore)事實上是構造器,可以建立並初始化另一個類型。關於構造器的內容,咱們會在第14章詳細介紹。
2、整型與浮點型之間的轉換
整型與浮點型之間的轉換與整型之間的轉換相似,所以咱們將上一節的示例修改以下:spa

[html] view plaincopy.net

 

  1. let historyScore:Float = 90.6           ①  orm

  2.   

  3.   

  4. let englishScore:UInt16 = 130           ②  

  5.   

  6.   

  7. let totalScore = historyScore + englishScore  //錯誤          ③  

  8.   

  9.   

  10. let totalScore = historyScore + Float(englishScore)  //正確,安全    ④  

  11.   

  12.   

  13. let totalScore = UInt16(historyScore) + englishScore  //正確,小數被截掉    ⑤  



上述代碼通過了一些修改,第①行代碼historyScore變量類型是Float類型。第②行代碼englishScore變量仍是UInt16類型。其中第③行代碼直接進行了計算,結果有編譯錯誤。第④行代碼是將UInt16類型的englishScore變量轉換爲Float類型,這種轉換是最安全的。第⑤行代碼是將Float類型的historyScore變量轉換爲UInt16類型,這種轉換首先會致使小數被截掉,另外若是historyScore變量數很大,會致使運行期異常,這與整型之間的轉換是相似的。

 

 

更多內容請關注國內第一本Swift圖書《Swift開發指南》

本書交流討論網站:http://www.51work6.com/swift.php

歡迎加入Swift技術討論羣:362298485

 

歡迎關注智捷iOS課堂微信公共平臺

相關文章
相關標籤/搜索