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

虽然编写任何编程语言,需要使用不同的变量来存储各种信息。变量不过是保留的内存位置来存储值。这意味着,当创建一个变量,在内存中会保留一些空间。

可能喜欢像存储字符串,字符,宽字符,整数,浮点数,布尔等各种数据类型的信息。根据一个变量的数据类型,操作系统分配内存,并决定什么可以存储保留在存储器。

内置数据类型
Swift 为程序员提供内置以及用户定义的种类数据类型。 以下是声明变量使用最频繁的基本数据类型的列表:

Int 或 UInt - 这是用于整数。更具体地可以使用Int32,Int64来定义32或64位有符号整数,其中作为UInt32或UInt64用来定义32或64位无符号整数的变量。 For example, 42 and -23.

  • Float - 这是用来表示一个32位浮点数,一般用于使用较小的小数点数字。 例如:3.14159,0.1,和 -273.158。
  • Double - 这是用来表示一个64位浮点数,用于非常大的浮点值。  例如: 3.14159, 0.1, 和 -273.158.
  • Bool - 这代表一个布尔值,真或假。
  • String - 这是有序字符集合。例如, "Hello, World!"
  • Character - 这是一个单字符字符串。例如, "C"
  • Optional - 这表示可以容纳一个值或没有任何值的变量。

有下列有关整数类型要点:

  • 在32位的平台上,Int 大小与 Int32 的大小相同。
  • 在64位的平台上,Int 大小与 Int64 的大小相同。
  • 在32位的平台上,UInt 的大小与 UInt32 的大小相同。
  • 在 64 位的平台上,UInt 的大小与 UInt64 的大小相同。
  • Int8, Int16, Int32, Int64 可以用来表示 8 Bit, 16 Bit, 32 Bit 和 64 Bit 形成有符号整数。

UInt8, UInt16, UInt32 和 UInt64 可以用来表示 8 Bit, 16 Bit, 32 Bit 和 64 Bit 形成无符号整数。
绑定值
下表显示变量类型,需要多少内存存储此值在存储器中,在这种类型的变量可以存储最大值和最小值。

类型别名
可以从现有类型使用typealias创建一个新的名称。以下是使用简单 typealias 的语法来定义新类型:

复制代码 代码如下:

typealias newname = type

例如,下面告诉编译器Feet 是 Int 的另一个名字:

复制代码 代码如下:

typealias Feet = Int

现在,下面的声明是完全合法的,并创建一个整型变量为 distance:

复制代码 代码如下:

import Cocoa

typealias Feet = Int
var distance: Feet = 100
println(distance)

当我们使用 playground 运行上面的程序,到以下结果。

100

类型安全
Swift 是一种安全的语言,这意味着,如果代码的一部分需要一个字符串, 那么不能错误地传递一个int。

由于 Swift 是类型安全的,当类型检查时它执行编译代码并标志类型不匹配的错误。

复制代码 代码如下:

import Cocoa

var varA = 42
varA = "This is hello"
println(varA)

当我们编译上面的程序它产生以下编译时错误。

复制代码 代码如下:

Playground execution failed: error: :6:6: error: cannot assign to 'let' value 'varA'
varA = "This is hello"

类型推断
在它编译代码时,类型推断使编译器自动推导出特定表达式的类型, 简单地通过检查所提供的值。Swift 采用类型推断制定出合适的类型如下。

复制代码 代码如下:

 import Cocoa

// varA is inferred to be of type Int
var varA = 42
println(varA)

// varB is inferred to be of type Double
var varB = 3.14159
println(varB)

// varC is also inferred to be of type Double
var varC = 3 + 0.14159
println(varC)

当我们使用 playground 运行上面的程序,得到以下结果。

42
3.14159
3.14159

Swift数字类型之间的转换
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)事实上是构造器,能够创建并初始化另外一个类型。二、整型与浮点型之间的转换
整型与浮点型之间的转换与整型之间的转换类似,因此我们将上一节的示例修改如下:

复制代码 代码如下:

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基本数据类型、swift 基本类型、swift强制类型转换、swift 类型转换、swift3 类型转换,以便于您获取更多的相关知识。

时间: 2024-10-26 08:07:03

Swift内置的数字类型及基本的转换方法_Swift的相关文章

《Unity着色器和屏幕特效开发秘笈》—— 3.2 利用Unity3D内置的高光类型

3.2 利用Unity3D内置的高光类型 Unity已经为我们提供了一个高光函数,我们可以在自己的着色器中使用.这个高光函数也就是BlinnPhong镜面反射光照模型.它是高光类型中的一种更加基础且高效的形式,你甚至可以在当今的游戏中找到很多关于它的应用.由于它已经集成到Unity着色器语言当中,首先我们可以在Unity着色器中建立高光效果--我们认为这是一个很好的开端.你也可以在Unity的参考手册中找到相关的例子,但我们将对高光进行更深层次地探究,并且解释高光数据的来源以及它的工作原理.这将

详解Python中内置的NotImplemented类型的用法_python

它是什么?  >>> type(NotImplemented) <type 'NotImplementedType'> NotImplemented 是Python在内置命名空间中的六个常数之一.其他有False.True.None.Ellipsis 和 __debug__.和 Ellipsis很像,NotImplemented 能被重新赋值(覆盖).对它赋值,甚至改变属性名称, 不会产生 SyntaxError.所以它不是一个真正的"真"常数.当然,我们

Swift中内置的集合类型学习笔记_Swift

一.引言 Swift中提供了3种集合类型,Array数据类型,Set集合类型,Dictionary字典类型.Array用于存放一组有序的数据,数据角标从0开始一次递增:Set用于存放一组无序的数据,数据不可以重复:Dictionary也用于存放一组无序的数据,只是其是按照键值对的方式存储,键值必须唯一.这里借用官方文档中的一张图来表示3种集合类型的特点: 二.Array类型 Array通常也被称为数组,Swift是一种类型安全语言,其中的Array类型也必须确定其元素的类型,声明数组类型有两种方

传下一个版本的iPhone将内置数字罗盘

作者:天虹 5月9日消息,一个月前首次出现的传言称下一个版本的iPhone将配置内置的数字罗盘.现在,知名移动博客Boy Genius Report得到可靠的截屏图像似乎证实了这个传言. 这个图像显示了这个罗盘上的一个调试菜单的选项.当升级版本的iPhone推出时,据说会增加这个功能. 正如MacRumors网站报道的那样,人们使用数字罗盘能够做的有趣事情之一是引进"移动增强现实"式的应用程序.移动增强现实使用手机上的照相机和罗盘让设备捕捉一个地方的图像.然后,来自这个罗盘的信息就会在

JavaWeb学习----JSP内置对象详解

[正文] 呼~~~花了一下午的时间,终于把JSP的内置对象的内容学完了,并做好了笔记,方便以后回顾. 今天是10月的最后一天,小小地总结一下吧,这个月共发表博客25篇(排版好麻烦的说),所有内容均由生命壹号本人敲键盘码起.基本是一天一篇,包括国庆的时候也是独霸教研室在学习,学习的大致内容也是和数据库.JavaWeb有关.毕竟以后搞开发不可能是单机吧,网络的部分是多么的重要.下个月要提高学习效率,学习任务要加大,争取早日进入工程实践,嘿嘿~~~ 菜鸟加油,恩,说我自己呢! 骚年矜持,恩,在说你咧!

《卸甲笔记》-PostgreSQL和Oracle的数据类型的对比系列二:数字类型

PostgreSQL是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用.随着PostgreSQL的应用越来越广泛,Oracle向PostgreSQL数据库的数据迁移需求也越来越多.数据库之间数据迁移的时候,首先遇到的,并且也是最重要的,就是数据类型之间的转换.下面根据自己的理解和测试,写了一些数据类型之间的差异以及迁移时的注意事项的文章,不足之处,尚请多多指教. 数字类型 Oracle内建的数字类型有四种,分别是number,float,binary_float,bin

iOS8 Core Image In Swift:自动改善图像以及内置滤镜的使用

iOS8 Core Image In Swift:自动改善图像以及内置滤镜的使用 iOS8 Core Image In Swift:更复杂的滤镜 iOS8 Core Image In Swift:人脸检测以及马赛克 iOS8 Core Image In Swift:视频实时滤镜 Core Image是一个很强大的框架.它可以让你简单地应用各种滤镜来处理图像,比如修改鲜艳程度, 色泽, 或者曝光. 它利用GPU(或者CPU)来非常快速.甚至实时地处理图像数据和视频的帧.并且隐藏了底层图形处理的所有

Swift的74个常用内置函数介绍_Swift

Swift包含了74个内置函数,但在 The Swift Programming Langage 一书中只介绍了其中的7个,其它的都没有在文档中体现. 这篇文章列举出了所有的Swift库函数.文中所谓的 内置函数 是指无需引入任何模块(比如说Fundation等)即可以直接使用的函数. 下面先来看看7个在文档中提到的库函数: 下面列出一些很实用,但未在文档中体现的库函数: 复制代码 代码如下: //断言,参数如果为`true`则继续,否则抛出异常 //assert mentioned on pa

《Abaqus GUI程序开发指南(Python语言)》——2.4 内置对象类型

2.4 内置对象类型 Python语言中提供了强大的对象类型作为语言的组成部分,内置对象使得程序编写更加容易,并且内置对象往往比自己定制的数据结构更有效率.Python语言中主要有如表2.1所示几类对象类型. 2.4.1 数字Python语言中的数字类型包括整型.浮点型.复数型等,与一般的C.C++等语言没有太大的区别,以下是几类数字类型的内置对象定义方法. [实例2.4]定义数字类型 >>>a=5+5 #定义整形数据 >>>a 10 >>> b=5*