• Swift数字类型之间的转换


    Swift数字类型之间的转换Swift是一种安全的语言,对于类型的检查非常严格,不同类型之间不能随便转换。
    一、整型之间的转换
    在C和Objective-C等其他语言中,整型之间有两种转换方法:
    从小范围数到大范围数转换是自动的;
    从大范围数到小范围数需要强制类型转换,有可能造成数据精度的丢失。
    而在Swift中这两种方法是行不通的,我们需要通过一些函数进行显式地转换,代码如下:

    [html] view plaincopy
     
    1. let historyScore:UInt8 = 90  
    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章详细介绍。
    二、整型与浮点型之间的转换
    整型与浮点型之间的转换与整型之间的转换类似,因此我们将上一节的示例修改如下:

    [html] view plaincopy
     
    1. let historyScore:Float = 90.6           ①  
    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课堂微信公共平台

  • 相关阅读:
    html5+css3中的background: -moz-linear-gradient 用法 (转载)
    CentOS 安装Apache服务
    Linux 笔记
    CURL 笔记
    Spring Application Context文件没有提示功能解决方法
    LeetCode 389. Find the Difference
    LeetCode 104. Maximum Depth of Binary Tree
    LeetCode 520. Detect Capital
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 136. Single Number
  • 原文地址:https://www.cnblogs.com/iOS-Blog/p/3957376.html
Copyright © 2020-2023  润新知