原創(chuàng)文章校摩,歡迎轉載蚜退。轉載請注明:關東升的博客
在C、Objective-C和Java等其他語言中颗圣,整型之間有兩種轉換方法:
? 從小范圍數(shù)到大范圍數(shù)轉換是自動的拷获;
? 從大范圍數(shù)到小范圍數(shù)需要強制類型轉換篮撑,有可能造成數(shù)據(jù)精度的丟失。
而在Swift中這兩種方法是行不通的匆瓜,需要通過一些函數(shù)進行顯式地轉換赢笨,代碼如下:
let historyScore:UInt8 = 90
let englishScore:UInt16 = 130
let totalScore = historyScore + englishScore? //錯誤
程序就會有編譯錯誤,原因是historyScore是UInt8類型陕壹,而englishScore是UInt16類型质欲,它們之間不能轉換。
兩種轉換方法:
? 一種是把UInt8的historyScore轉換為UInt16類型糠馆。由于是從小范圍數(shù)轉換為大范圍數(shù),這種轉換是安全的怎憋。
代碼:
let totalScore = UInt16(historyScore) + englishScore? //是正確的轉換方法又碌。
? 另外一種是把UInt16的englishScore轉換為UInt8類型。由于是從大范圍數(shù)轉換為小范圍數(shù)绊袋,這種轉換是不安全的毕匀,如果轉換的數(shù)比較大可能會造成精度的丟失。
代碼:
let totalScore = historyScore + UInt8(englishScore)? //是正確的轉換方法癌别。
本例中englishScore的值是130皂岔,這個轉換是成功的,如果把這個數(shù)修改為1300展姐,雖然程序編譯沒有問題躁垛,但是會在控制臺中輸出異常信息。
整型與浮點型之間的轉換
整型與浮點型之間的轉換與整型之間的轉換類似:
let historyScore:Float = 90.6
let englishScore:UInt16 = 130
let totalScore = historyScore + englishScore? //錯誤
let totalScore = historyScore + Float(englishScore)? //正確圾笨,安全
let totalScore = UInt16(historyScore) + englishScore? //正確教馆,小數(shù)被截掉