在编程语言中,不同的数据信息需要不同的数据类型来存储,计算机内存中针对不同的数据类型它们所分配的内存大小是不同的,特定的值需要特定的类型来声明。

 Swift 数据类型

  内置数据类型

  整数 - Int & UInt

  根据一个整数变量占据的内存空间(8/16/32/64-bit,现在 iOS 开发基本全部是 64 位)以及整数是否带有符号(Unsinged),Swift 一共定义了 8 种不同的整数类型:

  Int8/Int16/Int32/Int64

  UInt8/UInt16/UInt32/UInt64

  第一行表示有符号整数,第二行表示无符号整数。

  一般不会在代码中直接使用这些具体的整数类型,只使用 Int 来定义有符号整数,使用 UInt 来定义无符号整数。Swift 编译器会根据当前的目标编译平台,把 Int 或者 UInt 转换成相应的整数类型。

  例如在 32 位平台上,Int 和 Int32 表示的整数长度相等。

  在 64 位平台上,分别使用 mix 和 max 方法,看看 Int 和 Int64 所表达的值分别是多:

 1 print("Int.min = \(Int.min)")
 2 print("Int.max = \(Int.max)")
 3 print("Int64.min = \(Int64.min)")
 4 print("Int64.max = \(Int64.max)")
 5
 6 打印结果:
 7 Int.min = -9223372036854775808
 8 Int.max = 9223372036854775807
 9 Int64.min = -9223372036854775808
10 Int64.max = 9223372036854775807

  Int 和 Int64 表达的范围是一样的。

  同时在 Swift 里面,可以用不同的进制来表达一个整数:

1 let fifteenInDecimal = 15 // 10 进制
2 let fifteenInHex = 0xF // 16 进制
3 let fifteenInOctal = 0o17 // 8 进制
4 let fifteenInBinary = 0b1111 // 2 进制

  以及在数字中使用下划线:

1 let million = 1_000_000

  提示: 除非所在的硬件平台有特别明确的要求要使用 UInt 来定义无符号整数,那么应该尽可能的使用 Int 来表达所有的整数类型,哪怕可以确定一个整数一定是非负数,这会减少很多不必要的类型转换的麻烦。

 浮点数 - Float & Double

  在 Swift 里面,根据表达的精度不同,有两种不同的浮点数类型:

  Float: 最多表达 6 位精度的浮点数。

  Double: 至少可以表达 15 位精度的浮点数。

1 var oneThirdInFloat: Float = 1/3
2 var oneThirdInDouble: Double = 1/3
3
4 print("\(oneThirdInFloat)")
5 print("\(oneThirdInDouble)")
6
7 打印:
8 0.333333
9 0.333333333333333

  还可以使用科学计数法表示浮点数:

1 var PI = 0.314e1
2 PI = 314e-2

  提示: 如果没有明确的需求,应该统一使用 Double 来定义浮点数。

 和数字有关的 Type Inference

  在 Swift 里,当给变量不指定类型的时候,编译器会把整数的类型推倒为 Int,会把浮点数的类型推倒为 Double:

1 var three = 3
2 print(" 3 的类型是: \(type(of: three))")
3
4 var zeroPointForteen = 0.4
5 print(" 0.4 的类型是: \(type(of: zeroPointForteen))")
6
7 打印:
8  3 的类型是: Int
9  0.4 的类型是: Double

  在 Swift 里面可以把不同类型的数字的字面值直接进行运算:

1 var PI = 3 + 0.14
2 print(" PI 的值: \(PI), PI 的类型是:\(type(of: PI))")
3
4 打印:
5  PI 的值: 3.14, PI 的类型是:Double

  但是不能把不同数字类型的变量直接进行算数运算,当对变量进行算数运算的时候,所有变量的类型必须是相同的,如果变量类型不同,必须明确将其中一些变量进行类型转换:

1 var sum = Double(three) + zeroPointForteen

  从上面可以看出,使用 Double(three) 把一个 Int 类型的 three "转换"成了浮点数,在这里,之所以对转换加引号,是因为并没有真的把 three 类型从 Int 转换成 Double,而是用 three 的值,初始化了一个新的值为 3 的 Double,并用这个新的 Double 和 zeroPointForteen 相加而已。

参考链接:https://www.boxueio.com/series/swift-up-and-running/ebook/2

转载于:https://www.cnblogs.com/chmhml/p/6892308.html

Swift基础学习(二)数据类型相关推荐

  1. ArcGIS基础学习:数据类型

    ArcGIS基础学习:数据类型 前言 最近喜欢上了学习地理统计的相关内容,准备开始学习,会不定时修改. 第一章 数据类型 一.arcgis数据类型: 1.数字型:整数型.单精度浮点型.双精度浮点型 2 ...

  2. mysql用创建的用户登陆并修改表格_MySQL 基础学习二:创建一个用户表,并增删改查...

    MySQL 基础学习二:创建一个用户表,并 增删改查 提示:MySQL 命令建议都用大写,因为小写运行时,还是翻译成大写的. 第一步,创建一个用户表 1,打开控制台,进入数据库 C:\Users\Ad ...

  3. 大数据基础学习二:在VMware虚拟机上安装Ubuntu完整步骤及需要注意的问题(以VMware Workstation 15.1.0 Pro和Ubuntu18.04.3优麒麟版为例)

    大数据基础学习二:在VMware虚拟机上安装Ubuntu完整步骤及需要注意的问题 (以VMware Workstation 15.1.0 Pro for Windows和Ubuntu18.04.3优麒 ...

  4. python pyramid基础学习二

    python pyramid基础学习二 1.前言 前面我们使用了基础命令创建pyramid项目,并运行了Hello word,万事开头难,我们知道了开发pyramid项目需要一个env文件夹,里面包 ...

  5. Verilog基础学习二

    Verilog基础学习二 文章目录 Verilog基础学习二 一.always 块 1.阻塞性赋值和非阻塞性赋值 二.条件语句 1.if 语句 基本用法 2.避免引入锁存器 3.case 语句 4.c ...

  6. C 语言 和 C++语言的对比学习   二 数据类型

    不管是什么语言,我们最习惯的是通过 "hello world" ,来昭告世界,我们有了新的语言来向这个世界问好,尽管真正属于我们自己的其实是哭声.(呵呵,笑点有点低),下面我们来介 ...

  7. Java基础学习(二十七)之IO流

    1. File 1.1 File类概述和构造方法(myFile中的com.itheima_01中的FileDemo01) File:它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对 ...

  8. 19-10-29-C++基础学习二

    上一篇对基础部分的编译流程,输入输出,控制结构,进行了介绍,这篇主要是对里面的变量以及基本类型,标准库,类的简介 进行相关的总结: 变量: ​ · 什么是变量? ​ 变量提供了程序可以操作的有名字的存 ...

  9. Swift语言学习(二)

    原文链接:http://www.ioswift.org/ 4.0.Swift指南 以上章节主要从整体上介绍了 Swift 的相关知识,从本章开始,我们一步一步学习 Swift ,正式开启 Swift ...

最新文章

  1. 今天的工作发现了4年前的“bug一枚”
  2. Android短视频中如何实现720P磨皮美颜录制
  3. linux rm命令参数及用法详解---linux删除文件或目录命令
  4. kvm虚拟化管理平台WebVirtMgr部署-完整记录(2)
  5. 升级MariaDB为10.1版本
  6. 【渝粤教育】 广东开放大学 21秋期末考试物业环境与秩序管理10122k2
  7. vant toast loading 倒计时_日期倒计时软件哪个好 苹果日期倒计时软件推荐
  8. 第1章第1节练习题10 查找中位数
  9. 计算机排名考研,计算机考研学校排名
  10. python学习6 web开发
  11. wordpress静态文件加速,整合CDN
  12. u盘如何安装2003服务器系统安装,u盘怎么安装win server2003系统是iso
  13. Ettercap网络嗅探工具攻略
  14. mysql筛选包含某个字符_mysql判断某个字符串是否包含某个字符串的3种方法
  15. html游戏官网界面设计教程,【ideas】游戏官网我们到底应该设计什么?
  16. 分布式事务处理框架之LCN
  17. win11 删除不要的输入法,删除阿尔巴尼亚语输入法
  18. 黑盒测试五大测试阶段
  19. 小程序:emoji等表情base64后乱码解决方案
  20. 遥控汽车网页小游戏源码

热门文章

  1. 学校选址_洛谷U3451_带权中位数
  2. cocoapods的安装(这真是一个神奇的东西,每次安装的方法都不一样,而且很容易出现各种各样的错误)...
  3. GUN/LINUX命令之 cp mv install
  4. 三层架构与设计模式思想部署企业级数据库业务系统开发
  5. Oracle 协议适配器错误
  6. 接口,new,匿名内部类
  7. 小程序 公众号/h5相互跳转-webview
  8. Python 3.5.2 TypeError: a bytes-like object is required, not 'str’问题解决方案
  9. 不要学习代码,要学会思考(转)
  10. 简化Java中的异常处理