第二章 量值和基本数据类型

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 入门到精通(第二章基本数据类型与量值)的更多相关文章

  1. 网络安全从入门到精通 (第二章-6) 后端基础PHP—表单验证

    本文内容: 什么是表单? 如何创建一个表单: 接收并验证: PHP和数据库交互 1,什么事表单? 表单在网页中主要负责数据采集. 表单由三部分组成: 表单标签:这里面包含了处理表单数据所用动态脚本的U ...

  2. 网络安全从入门到精通 (第二章-4) 后端基础PHP—简介及基本函数-上

    本文内容 什么是PHP PHP的基础语法 运算符 条件分支语句 1,什么是PHP? PHP(超文本预处理器)是一种通用开源语言,(是动态语言中的一种,动态语言还有ASP,ASPX,JSP). PHP语 ...

  3. 网络安全从入门到精通(第二章-3)后端基础SQL— MySQL高级查询与子查询

    本文内容: MySQL的基础查询语句 链接查询 联合查询 子查询 渗透测试常用函数 1,MySQL基础查询语句: select * from 表 order  by ASC/DESC; ASC:从小到 ...

  4. 网络安全从入门到精通 (第二章-2) 后端基础SQL—MySQL数据库简介及SQL语法

    本文内容: 什么是数据库 常见数据库 数据库的基本知识 基本SQL语法 1,什么是数据库? 数据库就是将大量数据保存起来,通过计算机加工,可以高效访问的数据聚合. 数据库就是长期存储在计算机内,有组织 ...

  5. 网络安全从入门到精通 ( 第二章-5) 后端基础PHP—简介及基本函数-下

    本文内容: 循环语句 PHP获取表单信息 PHP操作Mysql语句 语法SQL注入 1,循环语句: for循环: 语法:for($x=0,$x<10;$x++){执行语句;} 注意:$x++,先 ...

  6. 网络安全从入门到精通 (第二章-1) Web安全前端基础

    本文内容: 前端是什么? 前端代码 HTML CSS JS !!!醋成酒的小墨,促成就的小墨,小墨促成就,!!! 1,前端是什么? 网站一般用两部分组成,前端负责展示,后端负责处理请求. 2,前端代码 ...

  7. ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区 1 Desktop简介 1.1 ArcGIS for Desktop ...

  8. SaltStack 入门到精通第二篇:Salt-master配置文件详解

    SaltStack 入门到精通第二篇:Salt-master配置文件详解     转自(coocla):http://blog.coocla.org/301.html 原本想要重新翻译salt-mas ...

  9. Google C++测试框架系列入门篇:第二章 开始一个新项目

    上一篇:Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest? 原始链接:Setting up a New Test Project 词汇表 版本号:v_0.1 开始一个新项目 ...

  10. python从入门到实践 第二章

    python变量赋值: python的变量赋值 可以是单引号 也可以是双引号python 变量赋值的时候不能加()的 比如 name = "My Name is GF"变量赋值的时 ...

随机推荐

  1. Linux 磁盘空间查看及清理

    1. 查看磁盘空间 查看当前目录各文件夹大小 du -ah -x --max-depth=1 查看文件大小 ls -lh 查看系统空间占用 df -h 2. 磁盘空间清理 Linux清除文件内容 ca ...

  2. [整理] FFmpeg官方文档树

    扫了一遍官方文档,整理张官文树. 当然还有很多细节,可以慢慢沿着树根填,有需要可以联系我要ProcessON源文件,我尽量给个最新的出来. 官文 : http://ffmpeg.org/documen ...

  3. Plot函数用法详解——R语言

    plot是R中的基本画图工具,直接plot(x),x为一个数据集,就能画出图,soeasy!但是细节往往制胜的关键,所以就详细来看看plot的所有可设置参数及参数设置方法.R语言的基础绘图系统主要由基 ...

  4. 大语言模型快速推理: 在 Habana Gaudi2 上推理 BLOOMZ

    本文将展示如何在 Habana Gaudi2 上使用 Optimum Habana.Optimum Habana 是 Gaudi2 和 Transformers 库之间的桥梁.本文设计并实现了一个大模 ...

  5. pandas之聚合函数

    在<Python Pandas窗口函数>一节,我们重点介绍了窗口函数.我们知道,窗口函数可以与聚合函数一起使用,聚合函数指的是对一组数据求总和.最大值.最小值以及平均值的操作,本节重点讲解 ...

  6. [Java]【异常处理】在项目开发中的通用规范

    这一问题,已苦恼多日,上述答案系近整整2日广泛阅读书籍.博客.网络问答后,归纳并苦思而成. 本博文仅罗列总的观点,各观点的具体解释,可私信Word笔记. 如需转载or复制时,请注明出处. 本博文同步发 ...

  7. Vue2异步更新及nextTick原理

    vue 官网中是这样描述 nextTick 的 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,可以获取更新后的 DOM. 在学习 nextTick 是如何实现之前,我们 ...

  8. day107:MoFang:Python操作MongoDB数据库:PyMongo

    目录 PyMongo 1.PyMongo安装 2.数据库连接 3.数据库管理 4.集合管理 5.文档管理 PyMongo 1.PyMongo安装 pip install pymongo 2.数据库连接 ...

  9. [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 ...

  10. C# 从0到实战 变量的定义与使用

    变量的定义 变量本质是一种内存的占位符,使得我们可以轻松操作计算机.C#的变量声明格式是: 类型 名称 = 值: 1 //.... 2 3 int val = 0; //定义并赋值 4 5 Conso ...