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"变量赋值的时 ...
随机推荐
- Prometheus服务发现之kubernetes_sd_config
一.为什么要使用Prometheus服务发现 之前我们讲过通过配置prometheus-operator的CRD ServiceMonitor来达到K8S集群相关组件和微服务的监控的目的,可以在Ser ...
- SwitchHosts operation not permitted 解决方案--亲测有效
SwitchHost!是帮助我们管理Hosts的工具,可以帮助我们做域名解析, 弥补了如果要修改域名还要改计算机C:\Windows\System32\drivers\etc位置下的hosts文件的弊 ...
- Ubuntu+uWSGI部署基于Django的API【鸿篇巨制,事无巨细】
背景 任务: 视频翻译项目需要在两个服务器上进行通信(国内&海外的阿里服务器). 因为python是主语言,选用了Django 来快速部署API. 注:Django中文文档:https://d ...
- 这年头,谁的好友列表还没有躺一个ChatGPT啊?
你要是说这个,我可不困了 大家好,我最近开始使用一款非常有趣的AI机器人,它叫做ChatGPT.ChatGPT是一款独特的聊天机器人,它可以进行智能对话,回答你的问题,还可以学习你的语言习惯,使得对话 ...
- java开发技术栈如何选型
前言 2023泰山景区门票免费政策是从1月21日到3月31,今天4.1起不再免费啦,泰山的人.山和系统终于平安的渡劫过去! 洪峰时疯狂的抢票.各类攻击,分销MT两次凌晨抗洪事件,我及其我的团队又一次得 ...
- 长达 1.7 万字的 explain 关键字指南!
当你的数据里只有几千几万,那么 SQL 优化并不会发挥太大价值,但当你的数据里去到了几百上千万,SQL 优化的价值就体现出来了!因此稍微有些经验的同学都知道,怎么让 MySQL 查询语句又快又好是一件 ...
- [网络/Linux]处理安全报告/安全漏洞的一般流程与思路
对近期工作中所经历的4次处理第三方网络安全公司的安全报告及其安全漏洞的经验做一点小结. 1 流程 Stage1 阅读/整理/分类:安全漏洞报告的安全漏洞 (目的:快速了解漏洞规模和分布) Stage2 ...
- Express实现定时发送邮件
在开发中我们有时候需要每隔 一段时间发送一次电子邮件,或者在某个特定的时间进行发送邮件, 无需手动去操作,基于这样的情况下我们需要用到了定时任务,一般可以写个定时器,来完成相应的需求,在 node.j ...
- 【实践篇】基于CAS的单点登录实践之路
作者:京东物流 赵勇萍 前言 上个月我负责的系统SSO升级,对接京东ERP系统,这也让我想起了之前我做过一个单点登录的项目.想来单点登录有很多实现方案,不过最主流的还是基于CAS的方案,所以我也就分享 ...
- CesiumJS 源码杂谈 - 从光到 Uniform
目录 1. 有什么光 2. 光如何转换成 Uniform 以及何时被调用 2.1. 统一值状态对象(UniformState) 2.2. 上下文(Context)执行 DrawCommand 2.3. ...