`

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课堂微信公共平台

分享到:
评论

相关推荐

    swift-Money-货币金额的精确类型安全的表示

    3. **货币符号和汇率支持**:Money库可能包含了对不同货币的支持,允许开发者指定货币类型,并且可能提供了与不同货币之间转换的功能。这在处理国际支付或货币兑换的场景下非常有用。 4. **操作简便**:Money库通常...

    Swift内置的数字类型及基本的转换方法

    - 在 Swift 中,不同数字类型之间的转换需要显式进行。例如,将 `Int` 转换为 `Double`,可以使用 `doubleValue` 属性,如 `let intVal: Int = 10; let doubleVal: Double = intVal.doubleValue`。相反,将 `Double...

    swift 实现高级计算器

    4. **进制转换**:高级计算器通常提供不同进制间的转换,例如二进制、八进制、十进制和十六进制。我们可以为每种进制创建一个方法,如`binaryToDecimal()`, `decimalToBinary()`等,这些方法将根据给定的进制值进行...

    swift-Colorutilities采用纯Swift实现的颜色工具类

    7. **扩展Swift原生Color类型**:项目可能通过扩展Swift的原生`Color`类型,为Swift的UI框架(如UIKit和AppKit)添加额外的颜色操作方法,使得在界面设计时更加便捷。 8. **跨平台兼容性**:作为适用于macOS,iOS,...

    swift-BigInt-纯Swift实现的任意精度算术

    4. **类型转换**:`BigInt`对象可以与Swift的标准整型(如`Int`、`Int64`)之间进行转换。这通过构造函数和`toString()`方法实现,使得在需要时可以将大整数与其他数据类型交互。 5. **性能考虑**:虽然`BigInt`...

    swift 编程笔记 (英文)

    3. 数字和字符串:文档中提到了数字类型和字面量、数字与字符串之间的转换、数值的四舍五入、随机数生成、数值类型间的转换、指数运算等内容,这些都是在数据处理和数学运算中经常用到的。 4. 字符串和字符:解释了...

    Using Swift with Cocoa and Objective-C

    - **数字**:Swift的整型和浮点型可以与Objective-C的数据类型相互转换。 - **集合类**:Swift的数组和字典类型可以与Objective-C的`NSArray`、`NSMutableArray`、`NSDictionary`和`NSMutableDictionary`相互转换...

    Using Swift with Cocoa and Objective-C中文

    Swift可以自动将`nil`转换为Swift的`Optional`类型,从而避免了在使用Objective-C API时出现的强制类型转换。 **扩展(Extensions)** Swift中的扩展可以为现有类型添加新的功能,如方法、属性等。这对于增强...

    Swift开发者必备Tips

    Swift提供了一套完整的数学运算和数字处理工具,包括各种数字类型以及它们之间的转换。 **27. JSON和Codable** Swift通过Codable协议提供了一种便捷的方式来编码和解码JSON数据,这在处理网络请求时非常有用。 **...

    The Swift Programming Language中文完整版(CocoaChina精校)副本

    - **枚举语法**:使用`enum`关键字定义枚举类型,枚举成员之间使用逗号分隔。 - **匹配枚举值和Switch语句**:使用`switch`语句来匹配枚举值。 - **关联值**:枚举成员可以关联特定的值。 - **原始值**:枚举成员...

    Swift Quick Syntax Reference 2014

    - 数值类型间的转换。 6. **第6章:字符串** - **介绍**:介绍 Swift 中字符串的处理方法。 - **知识点**: - 字符串的创建和操作。 - 字符串格式化。 7. **第7章:布尔值** - **介绍**:讲解 Swift 中...

    Swift使用Cocoa中的数据类型教程

    数字类型方面,Swift的整数类型`Int`和浮点类型`Float`可以自动转换为`NSNumber`。这样,你可以方便地将Swift的数字值传递给需要`NSNumber`参数的方法。但是,需要注意`NSNumber`可以存储多种类型的数值,因此不能...

    swift 新功能

    同时,Swift 4也改进了数字类型的桥接,使得NSNumber与Swift内置的数字类型之间的转换更加自然。 在Swift 4中,我们还能看到对于KeyPath的支持。KeyPath是Swift 4新引入的一个特性,允许开发者引用对象的属性路径,...

    The Swift Programming Language

    - 数值型类型转换:展示了如何在不同的数值类型之间转换。 - 类型别名:给现有类型定义一个新的名称。 - 布尔值:逻辑值,表示真或假。 - 元组:一个可以包含多种类型值的复合数据类型。 - 可选:表示值可以为...

    swift2.0中文手册

    - **类型转换**:不同类型之间的转换。 - **类型嵌套**:在一个类型内部定义另一个类型。 #### 四、具体知识点详解 ##### 1. 常量和变量 - **定义**: 在Swift中,可以使用`let`关键字定义常量,使用`var`关键字...

    RomanNumeralKit:对Swift的一流罗马数字支持

    与常用类型(例如String , Int )之间的转换。 实际使用的扩展(例如版权文本)。 符合所有适用的数字协议。局限性固定数值范围据我们了解,标准的罗马数字仅限于1到3999之间的值。 没有0的概念。现代学者提出了对...

    swift-字符串分数计算解析器与'eval'相同

    3. **类型转换**:由于我们要处理分数,所以需要确保所有的数字都能被正确地转换为分数类型。Swift的标准库并没有内置分数类型,但可以使用第三方库如`AlgebraicEngine-Fraction`,或者自定义分数类。 4. **运算...

    Swifter - 100 个 Swift 必备 tips(免费)

    9. 字面量转换:Swift支持多种字面量类型,例如整数、浮点数、字符串等,以及它们之间的转换。 10. 下标、命名空间和单例:下标(subscript)提供了一种方便访问集合、列表或序列中元素的方式。命名空间用于组织代码...

    swift Character类型详解及实例

    Swift中的`Character`类型与`String`类型之间的相互转换是常见的操作。例如,如果你有一个`String`类型的变量,并且想要逐个字符处理,你可以使用`for-in`循环直接遍历字符串中的每个`Character`。下面是一个例子: ...

    The Swift Programming Language 中文版

    - **博客和文章**:如“AccessControl权限控制的黑与白”、“造个类型不是梦-白话Swift类型创建”等文章,提供了深入浅出的讲解。 以上概述了Swift编程语言中文版的主要知识点和概念,对于学习Swift的开发者来说是...

Global site tag (gtag.js) - Google Analytics