Swift数字类型之间的转换

news/2024/7/20 23:02:30 标签: swift, Swift教程, Swift视频, iOS8, ios
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类型,它们之间不能转换。
我们有两种转换方法。
一种是把UInt8的historyScore转换为UInt16类型。由于是从小范围数转换为大范围数,这种转换是安全的。代码第②行UInt16(historyScore)就是正确的转换方法。
另外一种是把UInt16的englishScore转换为UInt8类型。由于是从大范围数转换为小范围数,这种转换是不安全的,如果转换的数比较大会造成精度的丢失。代码第③行UInt8(englishScore)是正确的转换方法。由于本例中englishScore的值是130,这个转换是成功的,如果把这个数修改为1300,虽然程序编译没有问题,但是会在控制台中输出异常信息,这是运行期异常。
上述代码中,UInt16(historyScore)和UInt8(englishScore)事实上是构造器,能够创建并初始化另外一个类型。关于构造器的内容,我们会在第14章详细介绍。
二、整型与浮点型之间的转换
整型与浮点型之间的转换与整型之间的转换类似,因此我们将上一节的示例修改如下:
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图书 《Swift开发指南》
本书交流讨论网站: http://www.51work6.com/swift.php
欢迎加入Swift技术讨论群:362298485

欢迎关注智捷iOS课堂微信公共平台



http://www.niftyadmin.cn/n/1036744.html

相关文章

Uncaught Error: A <Route> is only ever to be used as the child of <Routes> element, never rendered d

react路由 22年发生了不小的变化 21年是这样写的 import ./App.css; import React from "react"; import Index from "./components/index"; import Alinput from "./components/alinput"; import { BrowserRouter as Router,Route } from &quo…

AtCoder Beginner Contest 259 D Circumferences

题目: 题目链接: D - Circumferences (atcoder.jp) 题目思路: 题目所求为能否从一个点 通过圆边到达另外一点 因为每个圆之间有交点存在连通的可能性 我们就只需要判断两个点 1.是否都在圆上 2.所在的圆是否连通 因为涉及到连通的问题…

Swift字典集合

字典表示一种非常复杂的集合,允许按照某个键来访问元素。字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合。键集合是不能有重复元素的,而值集合是可以重复的&#…

2.Java基础语法

类型转换 原因:开发中存在不同类型的变量或者数据赋值给其他类型的变量,也存在不同类型一起运算,其结果类型要确定下来 自动类型转换 原理:小范围类型的变量可以直接赋值给大范围类型的变量 范围信息 …

3.java程序设计流程控制

案例技术:随机数Random类 作用:产生一个随机数 步骤 1.导包(自动做的)import java.util.Random; 2.创建随机数对象:Random rnew Random(); 3.开始得到随机数:int datar.nextlnt(10);//从0到10 生产指定区间的随机数…

MySQL子查询之行子查询

顾名思义 行子查询 得出的数据是一行多列的数据 我们这两有一张staff 用户表 没错departmentid 是一个部门表的外键 我们可以清楚的看到 赵敏是开发部的 其他两个都属于人事部 如果我们想查询 与黄飞鸿 年龄和所属部门相同的数据 我们首先要查询出黄飞鸿的部门和名称 selec…

Swift字典类

在Foundation框架中提供一种字典集合,它是由“键-值”对构成的集合。键集合不能重复,值集合没有特殊要求。键和值集合中的元素可以是任何对象,但是不能是nil。Foundation框架字典类也分为NSDictionary不可变字典和NSMutableDictionary可变字典…

Swift中的循环语句

循环语句能够使程序代码重复执行。Swift编程语言支持4种循环构造类型:while、do while、for和for in。for和while循环是在执行循环体之前测试循环条件,而do while是在执行循环体之后测试循环条件。这就意味着for和while循环可能连一次循环体都未执行&…