Swift基础学习(二)数据类型
在编程语言中,不同的数据信息需要不同的数据类型来存储,计算机内存中针对不同的数据类型它们所分配的内存大小是不同的,特定的值需要特定的类型来声明。
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基础学习(二)数据类型相关推荐
- ArcGIS基础学习:数据类型
ArcGIS基础学习:数据类型 前言 最近喜欢上了学习地理统计的相关内容,准备开始学习,会不定时修改. 第一章 数据类型 一.arcgis数据类型: 1.数字型:整数型.单精度浮点型.双精度浮点型 2 ...
- mysql用创建的用户登陆并修改表格_MySQL 基础学习二:创建一个用户表,并增删改查...
MySQL 基础学习二:创建一个用户表,并 增删改查 提示:MySQL 命令建议都用大写,因为小写运行时,还是翻译成大写的. 第一步,创建一个用户表 1,打开控制台,进入数据库 C:\Users\Ad ...
- 大数据基础学习二:在VMware虚拟机上安装Ubuntu完整步骤及需要注意的问题(以VMware Workstation 15.1.0 Pro和Ubuntu18.04.3优麒麟版为例)
大数据基础学习二:在VMware虚拟机上安装Ubuntu完整步骤及需要注意的问题 (以VMware Workstation 15.1.0 Pro for Windows和Ubuntu18.04.3优麒 ...
- python pyramid基础学习二
python pyramid基础学习二 1.前言 前面我们使用了基础命令创建pyramid项目,并运行了Hello word,万事开头难,我们知道了开发pyramid项目需要一个env文件夹,里面包 ...
- Verilog基础学习二
Verilog基础学习二 文章目录 Verilog基础学习二 一.always 块 1.阻塞性赋值和非阻塞性赋值 二.条件语句 1.if 语句 基本用法 2.避免引入锁存器 3.case 语句 4.c ...
- C 语言 和 C++语言的对比学习 二 数据类型
不管是什么语言,我们最习惯的是通过 "hello world" ,来昭告世界,我们有了新的语言来向这个世界问好,尽管真正属于我们自己的其实是哭声.(呵呵,笑点有点低),下面我们来介 ...
- Java基础学习(二十七)之IO流
1. File 1.1 File类概述和构造方法(myFile中的com.itheima_01中的FileDemo01) File:它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对 ...
- 19-10-29-C++基础学习二
上一篇对基础部分的编译流程,输入输出,控制结构,进行了介绍,这篇主要是对里面的变量以及基本类型,标准库,类的简介 进行相关的总结: 变量: · 什么是变量? 变量提供了程序可以操作的有名字的存 ...
- Swift语言学习(二)
原文链接:http://www.ioswift.org/ 4.0.Swift指南 以上章节主要从整体上介绍了 Swift 的相关知识,从本章开始,我们一步一步学习 Swift ,正式开启 Swift ...
最新文章
- 今天的工作发现了4年前的“bug一枚”
- Android短视频中如何实现720P磨皮美颜录制
- linux rm命令参数及用法详解---linux删除文件或目录命令
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(2)
- 升级MariaDB为10.1版本
- 【渝粤教育】 广东开放大学 21秋期末考试物业环境与秩序管理10122k2
- vant toast loading 倒计时_日期倒计时软件哪个好 苹果日期倒计时软件推荐
- 第1章第1节练习题10 查找中位数
- 计算机排名考研,计算机考研学校排名
- python学习6 web开发
- wordpress静态文件加速,整合CDN
- u盘如何安装2003服务器系统安装,u盘怎么安装win server2003系统是iso
- Ettercap网络嗅探工具攻略
- mysql筛选包含某个字符_mysql判断某个字符串是否包含某个字符串的3种方法
- html游戏官网界面设计教程,【ideas】游戏官网我们到底应该设计什么?
- 分布式事务处理框架之LCN
- win11 删除不要的输入法,删除阿尔巴尼亚语输入法
- 黑盒测试五大测试阶段
- 小程序:emoji等表情base64后乱码解决方案
- 遥控汽车网页小游戏源码
热门文章
- 学校选址_洛谷U3451_带权中位数
- cocoapods的安装(这真是一个神奇的东西,每次安装的方法都不一样,而且很容易出现各种各样的错误)...
- GUN/LINUX命令之 cp mv install
- 三层架构与设计模式思想部署企业级数据库业务系统开发
- Oracle 协议适配器错误
- 接口,new,匿名内部类
- 小程序 公众号/h5相互跳转-webview
- Python 3.5.2 TypeError: a bytes-like object is required, not 'str’问题解决方案
- 不要学习代码,要学会思考(转)
- 简化Java中的异常处理