Swift4 入门到精通(第二章基本数据类型与量值)
第二章 量值和基本数据类型
Swift 支持的基本数据类型, 整型,浮点型,布尔型,元组,可选类型。
学习的目标:
常量与变量的意义、声明、命名规范、类型
数据进制与计算机存储原理
整型数据、浮点型数据、布尔型数据的应用
swift语言中的元祖类型和可选类型。
如何为类型取别名
2.1 变量与常量
在swift语言中,使用let关键字和var关键字分别用来表示常量和变量。
2.1.1 变量与常量的定义和使用
// 定一个一个变量,赋值字符串
var str = "Hello, swift!";
// 1 声明字符串变量str
var str: String; // 2 对字符串变量str进行赋值
str = "Hello, Swift!"; // 更改str变量的值
str = "new value"; // 在str字符串变量后边追加hello
str = str + "hello";
Swift是一种类型安全语言,即常量或变量在声明的时候必须指明明确的类型。 Xcode编译器支持对Swift语言的类型自动推断,当声明变量时如果直接给变量赋 初值,则编译器会根据赋值的类型来确定变量的类型,之后变量的类型将不可更改。
Swift语言支持在同一行语句中声明多个常量或者变量,但是要遵守明确类型的原则。
// 编译器推断
var a = 1, b = 2.9, c = "String"; // 手动指定
var a2: Int = 1, b2: Float = 2.9, c2: String = "String";
如果在同一句代码中声明多个变量并且没有提供初始值,可以通过指定最后一个变量的类型
对整体进行类型指定。
// 声明3个Int类型的变量
var one, two, three: Int;
如果需要修改变量的值,直接对变量再赋值即可。需要注意的是,所赋值的类型
必须和变量的类型保持一致。
2.1.2 变量和常量的命名规范
在Swift语言中,常量和变量的命名规则十分广泛,可以包括Unicode字符和数字,
需要注意的是,不可使用预留关键字来作为常量或者变量的名称。
常量和变量的命名不可以数字开头,空格、数学符号、制表符、箭头符号也不可以用在命名中。
可以使用中文命名,可以使用表情符号进行命名,可以使用穿插数字进行命名。
// 使用中文进行变量的命名
var 汉字 = "汉字"; // 使用表情符号进行命名
var = "哈哈哈"; // 含有数字的命名
var pen2 = "pencile"; // 可以使用下划线进行命名
var _swift_ = "Swift";
Swift语言官方文档采用 驼峰命名的方式,所谓驼峰命名,是指,以单词进行名称的拼接。
名称的首字母一般为小写,之后每个单词的首字母大写,其他字母均小写。
// 驼峰命名
var userName = "汉字";
Swift中的命名也有一些约定俗称的规则,例如量值属性首字母会小写,类名,枚举名,结构体名首字母会大写。
如果在命名中真的需要使用预留的关键字进行命名,可使用 ` 符号进行包装,
但是如非万不得已,开发中应尽量不使用这种方式命名。
// 用预留关键字进行命名
var `var` = 2;
2.3 初识基本数据类型
2.3.1 数学进制与计算机存储原理
Swift语言支持开发者使用多种进制进行数据的定义与计算,默认为10进制,如果有特殊需求,
可以通过在数据前面加前缀的方式实现。
var type_10 = 17; var type_2 = 0b10001;
var type_8 = 0o21; var type_16 = 0x11;
1B = 8bit
1KB = 2^10B
1MB = 2^10KB
1GB = 2^10MB
1TB = 2^10GB
1PB = 2^10TB
2.3.2 整型数据
Swift语言中的整型数据分为有符号整型数据和无符号整型数据。
// 8位无符号整型的最大值 255
var a1 = UInt8.max; // 16位无符号整型的最大值 65535
var a2 = UInt16.max; // 32位无符号整型的最大值 4294967295
var a3 = UInt32.max; // 32位无符号整型的最大值
var a4 = UInt64.max;
Swift语言中的无符号整型实际有五种,还有一种Unint类型,这种类型编译器会自动适配,在64位的机器上位
UInt64, 在32位上为Uint32.
// 获取数据类型所占位数,在64位机器砂锅UInt占8字节64位 var a5 = MemoryLayout<UInt>.size; var maxInt8 = Int8.max; var minInt8 = Int8.min; var maxInt16 = Int16.max; var minInt16 = Int16.min; var maxInt32 = Int32.max; var minInt32 = Int32.min; var maxInt64 = Int64.max; var minInt64 = Int64.min; var intSize = sizeof(Int);
2.3.3 浮点型数据
var b = MemoryLayout<Float>.size; // 4 Byte var b1 = MemoryLayout<Float32>.size; // 4 Byte var b2 = MemoryLayout<Float64>.size; // 8 Byte var b3 = MemoryLayout<Float80>.size; // 16 Byte var c = MemoryLayout<Double>.size; // 8 Byte
Swift 语言中也支持使用科学计数法来表示数字,在十进制中使用e来表示10的n次方
在16进制中使用p来表示2的n次方。
var sum = 1.25e3; var sum2 = 0x1p3;
Swift语言中,无论是整型数据还是浮点型数据,都可以在数字前加任意个0
来进行位数填充,也可以在数字中加入下划线进行分隔,进而增加可读性,
这些操作并不会影响原始数据,却提高了对开发者的编程友好型,使代码的结构更加清爽 。
var num1 = 001.23; // 1.23 var num2 = 1_000; // 1000 var num3 = 1_000.1_001; // 1000.1001
2.3.4 布尔型数据
var bool1 = true; var bool2 = false;
2.4 两种特殊的基本数据类型
Swift语言还支持两种特殊的基本数据类型,分别是元组类型和可选类型。
2.4.1 元组
var pen: (name: Stirng, price: Int) = ("钢笔", 2);
// 获取pen变量的名称
var name = pen.name;
// 获取pen变量的价格
var price = pen.price;
开发者在创建元组时,也可以在不指定元组中参数的名称,元组会自动位每个参数分配下标,
下标值将从0开始依次递增。
// 不指定参数名称的元组
var car: (String, Int) = ("甭吃", 20000);
// 通过下标来获取元组中每个组成元组的值
var carName = car.0;
var carPrice = car.1;
元组实例被创建后,开发者也可以通过指定变量或者常量来分解它。
// 不指定参数名称的元组
var car: (String, Int) = ("甭吃", 200000); // 进行元组的分解
var (theName, thePrice) = var;
print(theName, thePrice); var (theName, _) = car;
print(theName);
在Swift语言中,常常使用符号_来表示匿名的概念,因此,_ 也被称为匿名表示标识符。
2.4.2 可选类型
Swift语言中提供了一种包装的方式来对普通类型记性Optional包装,实现对空值情况的监控。
如果一个变量在逻辑上可能位nil, 则开发者需要将其包装位Optional类型。
var obj: String?;
if obj == nil {}
在声明obj变量的时候,这里将其声明为String?类型,在普通类型后面添加符号?
即可将普通类型包装为Optional类型。
Optional类型不会独立存在,总会依附于某个具体的数据类型智商,具体的数据
类型可以是基本数据类型,可以是结构体,也可以是类。
Optional类型只有两种值,可以理解为:
- 如果其依附于类型对应的量值有具体的值,则其为具体值的包装。
- 如果其依附于类型对应的量值没有具体的值,则为nill。
Optional类型是对普通类型的一种包装,因此在使用的时候也需要对其进行拆包操作,
拆包将使用Swift中的操作符!。
!符号出现在类型后面与实例后面,它出现在类型后面代表的是一种隐式解析的语法结构。
// 声明obj为String?类型
var obj: String? = "HS"; // 进行拆包操作
obj!
在使用!进行Optional值的拆包操作时,必须保证要拆包的值不为nill。
否则程序运行会出错。可以在拆包前使用if语句进行安全判断。
var obj: String? = "HS";
if obj != nill {
obj!
}
var obj: String? = "HS";
if let tmp = obj {
print(tmp)
} else {
obj = "HS";
print(obj!);
}
Swift语言还提供了一种if-let语法结构来进行Optional类型的值的绑定操作。
if-let结构中也可以同时进行多个Optional类型的值的绑定,之间逗号隔开。
var obj1: Int? = 1;
var obj2: Int? = 2;
if let tmp1 = obj1, let tmp2 = obj2 {
print(tmp1, tmp2);
}
如果开发者需要在if语句的判断中添加更多的业务逻辑,可以通过追加子句的方式来实现。
var obj1: Int? = 1;
var obj2: Int? = 2;
if let tmp1 = obj1, let tmp2 = obj2, tmp1 < tmp2 {
print(tmp1, tmp2);
}
2.5 为类型取别名
在Swift语言中使用typealias关键字来实现类型别名的效果。
typealias Price = Int; var penPrice: Price = 100;
Swift4 入门到精通(第二章基本数据类型与量值)的更多相关文章
- 网络安全从入门到精通 (第二章-6) 后端基础PHP—表单验证
本文内容: 什么是表单? 如何创建一个表单: 接收并验证: PHP和数据库交互 1,什么事表单? 表单在网页中主要负责数据采集. 表单由三部分组成: 表单标签:这里面包含了处理表单数据所用动态脚本的U ...
- 网络安全从入门到精通 (第二章-4) 后端基础PHP—简介及基本函数-上
本文内容 什么是PHP PHP的基础语法 运算符 条件分支语句 1,什么是PHP? PHP(超文本预处理器)是一种通用开源语言,(是动态语言中的一种,动态语言还有ASP,ASPX,JSP). PHP语 ...
- 网络安全从入门到精通(第二章-3)后端基础SQL— MySQL高级查询与子查询
本文内容: MySQL的基础查询语句 链接查询 联合查询 子查询 渗透测试常用函数 1,MySQL基础查询语句: select * from 表 order by ASC/DESC; ASC:从小到 ...
- 网络安全从入门到精通 (第二章-2) 后端基础SQL—MySQL数据库简介及SQL语法
本文内容: 什么是数据库 常见数据库 数据库的基本知识 基本SQL语法 1,什么是数据库? 数据库就是将大量数据保存起来,通过计算机加工,可以高效访问的数据聚合. 数据库就是长期存储在计算机内,有组织 ...
- 网络安全从入门到精通 ( 第二章-5) 后端基础PHP—简介及基本函数-下
本文内容: 循环语句 PHP获取表单信息 PHP操作Mysql语句 语法SQL注入 1,循环语句: for循环: 语法:for($x=0,$x<10;$x++){执行语句;} 注意:$x++,先 ...
- 网络安全从入门到精通 (第二章-1) Web安全前端基础
本文内容: 前端是什么? 前端代码 HTML CSS JS !!!醋成酒的小墨,促成就的小墨,小墨促成就,!!! 1,前端是什么? 网站一般用两部分组成,前端负责展示,后端负责处理请求. 2,前端代码 ...
- ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区 1 Desktop简介 1.1 ArcGIS for Desktop ...
- SaltStack 入门到精通第二篇:Salt-master配置文件详解
SaltStack 入门到精通第二篇:Salt-master配置文件详解 转自(coocla):http://blog.coocla.org/301.html 原本想要重新翻译salt-mas ...
- Google C++测试框架系列入门篇:第二章 开始一个新项目
上一篇:Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest? 原始链接:Setting up a New Test Project 词汇表 版本号:v_0.1 开始一个新项目 ...
- python从入门到实践 第二章
python变量赋值: python的变量赋值 可以是单引号 也可以是双引号python 变量赋值的时候不能加()的 比如 name = "My Name is GF"变量赋值的时 ...
随机推荐
- Linux 磁盘空间查看及清理
1. 查看磁盘空间 查看当前目录各文件夹大小 du -ah -x --max-depth=1 查看文件大小 ls -lh 查看系统空间占用 df -h 2. 磁盘空间清理 Linux清除文件内容 ca ...
- [整理] FFmpeg官方文档树
扫了一遍官方文档,整理张官文树. 当然还有很多细节,可以慢慢沿着树根填,有需要可以联系我要ProcessON源文件,我尽量给个最新的出来. 官文 : http://ffmpeg.org/documen ...
- Plot函数用法详解——R语言
plot是R中的基本画图工具,直接plot(x),x为一个数据集,就能画出图,soeasy!但是细节往往制胜的关键,所以就详细来看看plot的所有可设置参数及参数设置方法.R语言的基础绘图系统主要由基 ...
- 大语言模型快速推理: 在 Habana Gaudi2 上推理 BLOOMZ
本文将展示如何在 Habana Gaudi2 上使用 Optimum Habana.Optimum Habana 是 Gaudi2 和 Transformers 库之间的桥梁.本文设计并实现了一个大模 ...
- pandas之聚合函数
在<Python Pandas窗口函数>一节,我们重点介绍了窗口函数.我们知道,窗口函数可以与聚合函数一起使用,聚合函数指的是对一组数据求总和.最大值.最小值以及平均值的操作,本节重点讲解 ...
- [Java]【异常处理】在项目开发中的通用规范
这一问题,已苦恼多日,上述答案系近整整2日广泛阅读书籍.博客.网络问答后,归纳并苦思而成. 本博文仅罗列总的观点,各观点的具体解释,可私信Word笔记. 如需转载or复制时,请注明出处. 本博文同步发 ...
- Vue2异步更新及nextTick原理
vue 官网中是这样描述 nextTick 的 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,可以获取更新后的 DOM. 在学习 nextTick 是如何实现之前,我们 ...
- day107:MoFang:Python操作MongoDB数据库:PyMongo
目录 PyMongo 1.PyMongo安装 2.数据库连接 3.数据库管理 4.集合管理 5.文档管理 PyMongo 1.PyMongo安装 pip install pymongo 2.数据库连接 ...
- [Java EE]SpringBoot/Tomcat之启动时报"Error: Could not find or load main class CLASS xxxx"、"no main manifest attribute"异常
环境信息如下: OS: CENTOS 7 Tomcat : 9.0.46 SpringBoot: 2.3.12.RELASE Build JDK: 1.8.0_261 Runetime JDK : o ...
- C# 从0到实战 变量的定义与使用
变量的定义 变量本质是一种内存的占位符,使得我们可以轻松操作计算机.C#的变量声明格式是: 类型 名称 = 值: 1 //.... 2 3 int val = 0; //定义并赋值 4 5 Conso ...