Swift--量值与基本数据类型

系列文章目录

第一章: Swift–量值与基本数据类型


文章目录

  • 系列文章目录
  • 前言
    • `对学习过程做一个记录`
  • 变量和常量
    • 命名规范
    • 注释
  • 元祖类型
  • 可选类型
    • 拆包
  • typealias


前言

对学习过程做一个记录

提示:以下是本篇文章正文内容,下面案例可供参考

变量和常量

俩关键字letvar
他们的作用都是为某一个具体量值取了一个名称,也叫量值的声明

//声明一个变量str并为他赋值为Hello world
var str = "hello world"
//上边一行代码和下边两行代码等价

//先声明字符串变量
var str: String
//对字符串变量赋值
str = "hello, world"

为量值指定类型:在常量或变量名后加冒号,在冒号后指定类型
Swift是一种类型安全语言,即常量或者变量在声明的时候必须指定明确的类型。看到这里,读者可能会有一些疑问,为何在Xcode生成的模板代码中没有指定str变量的类型,系统依然没有报错,原因要归功于Xcode编译器,Xcode编译器支持对Swift语言的类型自动推断,当声明变量时,如果直接给变量赋初值,则编译器会根据赋值的类型来确定变量的类型,之后变量的类型将不可更改。


//更改str的值
str = "hello"
//在str后追加
str = str + "world" + str

//声明三个变量并让编译器推断他们的类型
var a = 1, b = 2, c = "string"
//声明三个变量并指定他们的类型
var a2: Int = 1, b2:Float = 2.3, c2:String = "string"

//在同一行代码中声明多个变量并切没有提供初始值,可以通过指定最后一个变量的类型对整体进行类型指定
//声明三个Int类型的变量
var one, two, three: Int

Switf允许我们省略分号来自动换行,也允许我们一行内写多句代码,这个时候就要使用分号来分割

如果要对变量重新赋值,要注意所赋值的类型必须和变量的类型保持一致请添加图片描述

命名规范

简而言之,使用驼峰命名法

注释

和OC一样,但Swift可以进行注释的嵌套

元祖类型

元组允许一些并不相关的类型自由组合成为新的集合类型
元组类型类似于日常生活中的套餐

//创建一个元组,其中有两种类型,字符串类型和整数类型
var pen:(name:String, price:Int) = ("pen", 2)
//获取元祖的pen的名称
var name = pen.name




//创建一个不指定参数名称的元祖
var car:(String, Int) = ("奔驰", 20)
//通过下标来取元祖中的各个元素的值
var name = car.0






//创建一个不指定参数名称的元祖
var car:(String, Int) = ("奔驰", 20)
//进行元祖分解
//这个时候theName被赋值为“奔驰,thePrice被赋值为20
var (theName, thePrice) = car

分解后的变量必须与元组中的元素一一对应(个数相等),否则编译器就会报错
请添加图片描述
也可以将某些不需要获取的元素使用匿名的方式来接收
请添加图片描述
使用符号“”来表示匿名的概念,因此“”也被称为匿名标识符

可选类型

可选值类型(Optional类型)是Swift语言特有的一种类型。首
先,Swift语言是一种十分强调类型安全的语言,开发者在使用到某个变量时,编译器会尽最大可能保证此变量的类型和值的明确性,保证减少编程中的不可控因素。然而在实际编程中,任何类型的变量都会遇到值为空的情况,在Objective-C语言中并没有机制来专门监控和管理为空值的变量,程序的运行安全性全部靠开发者手动控制。Swift语言提供了一种包装的方式来对普通类型进行Optional包装,实现对空值情况的监控。请添加图片描述
在Swift语言中,未做初始化的普通类型是不允许使用的,哪怕是用来进行判空处理也不被允许,当然也就不可以与nil进行比较运算.因此,开发者在使用前必须保证变量被初始化

那如果我们需要它为空怎么办呢?这个时候就把它包装成可选类型请添加图片描述
这个时候就不会报错了
在声明obj变量的时候,这里将其声明成了String?类型,在普通类型后面添加符号“?”,即可将普通类型包装为Optional类型。

Optional类型不会独立存在,其总是附着于某个具体的数据类型之上

拆包

“?”符号可以出现在类型后面,也可以出现在实例后面,如果出现在类型后面,其代表的是此类型对应的Optional类型,如果出现在实例后面,则代表的是可选链的调用。“!”符号同样可以出现在类型后面与实例后面,它出现在类型后面代表的是一种隐式解析的语法结构


//声明obj为String?类型
var obj:String? = "hs"
//进行拆包
obj!

在使用“!”进行Optional值的拆包操作时,必须保证要拆包的值不为nil,否则程序运行会出错
可以在拆包前使用if语句进行安全判断

//声明obj为String?类型
var obj:String? = "hs"
//进行拆包
if obj != nil {
    obj!
}

Swift语言还提供了一种if-let语法结构来进行Optional类型值的绑定操作

var obj:String? = "hs"
//进行if-let判断
if let tmp = obj {
    print(tmp)
} else {
    obj = "hs"
    print(obj!)
}

如果obj有值,则if-let结构将创建一个临时常量tmp来接收obj拆包后的值,并且执行if为真时所对应的代码块,在执行的代码块中,开发者可以直接使用拆包后的obj值tmp。如果obj为nil,则会进入if为假的代码块中,开发者可以在else代码块中将obj重新赋值使用。这种if-let结构实际上完成了判断、拆包、绑定拆包后的值到临时常量3个过程

if-let结构中也可以同时进行多个Optional类型值的绑定,之间用逗号隔开


var obj1:Int? = 1
var obj2:Int? = 2
if let tmp1 = obj1, let tmp2 = obj2 {
    print(tmp1,tmp2)
}

在同时进行多个Optional类型值的绑定时,只有所有Optional值都不为nil,绑定才会成功,代码执行才会进入if为真的代码块中
如果开发者需要在if语句的判断中添加更多业务逻辑,可以通过追加子句的方式来实现

var obj1:Int? = 1
var obj2:Int? = 2
if let tmp1 = obj1, let tmp2 = obj2,  tmp1 < tmp2{
    print(tmp1,tmp2)
}

隐式解析。隐式解析适用于这样的场景:当我们明确某个变量初始时为nil,并且在之后使用之前一定会被赋值时,我们可以将其声明为隐式解析的可选值,再对这个变量进行使用,就不需要进行拆包操作了在这里插入图片描述
因为obj没有拆包请添加图片描述


//将obj4声明为隐式解析的变量
var obj4:Int!
obj4 = 3
//在使用的时候,不用进行拆包操作,Swift会自动帮我们拆包
print(obj4 + 1)

typealias

在C、C++、Objective-C这些语言中都提供了typedef这样的关键字来为某个类型取一个别名,Swift语言中使用typealias关键字来实现相同的效果

//为Int类型取一个别名price
typealias price = Int
//使用price代替Int,效果完全一样
var price1: price = 100

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/125092.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

家用工作站方案:ThinkBook 14 2023 版

本篇文章聊聊今年双十一&#xff0c;我新购置的家用工作站设备&#xff1a;ThinkBook 14 2023&#xff0c;一台五千元价位&#xff0c;没有显卡的笔记本。我为什么选择它&#xff0c;它又能做些什么。 写在前面 2021 年年中的时候&#xff0c;我写过一篇《廉价的家用工作站方…

开源知识库软件xwiki在Windows下的安装

文章目录 开源知识库软件-xwiki在windows上的部署0、参考文档1、前置环境准备1.1、Windows版本及系统配置1.2、JDK11安装1.3、Tomcat9安装1.4、MySQL5.7数据库的安装 2、xwiki安装3、配置3.1、修改配置支持对文档内容进行搜索 4、问题解决4.1、附件无法上传问题4.1、附件无法下…

【309. 买卖股票的最佳时机含冷冻期】

目录 一、题目解析 二、算法原理 三、代码实现 class Solution { public:int maxProfit(vector<int>& prices) {int nprices.size();vector<vector<int>> dp(n,vector<int>(3));dp[0][0]-prices[0];dp[0][1]0;dp[0][2]0;for(int i1;i<n;i){dp…

Apipost发起请求,能正确返回,日志却打印java.io.EOFException: null 的原因

http响应头首部Content-Length - 程序员大本营 http响应头首部Content-Length HTTP Content-Length深入实践-CSDN博客 用了这么久HTTP, 你是否了解Content-Length?-CSDN博客 具体分析可看上面参考文章。 解决办法&#xff1a;可在请求头加上Content-Length&#xff0c;准确…

关于卷积神经网络的多通道

多通道输入 当输入的数据包含多个通道时&#xff0c;我们需要构造一个与输入通道数相同通道数的卷积核&#xff0c;从而能够和输入数据做卷积运算。 假设输入的形状为n∗n&#xff0c;通道数为ci​&#xff0c;卷积核的形状为f∗f&#xff0c;此时&#xff0c;每一个输入通道都…

通过一道题目带你深入了解WAF特性、PHP超级打印函数、ASCII码chr()对应表等原理[RoarCTF 2019]Easy Calc 1

题目环境&#xff1a; 依此输入以下内容并查看回显结果 11 1’ index.php ls 到这里没思路了 F12查看源代码 一定要仔细看啊&#xff0c;差点没找到&#xff0c;笑哭 访问calc.php文件 果然有点东西 PHP代码审计 error_reporting(0);关闭错误报告 通过GET方式传参的参数num sho…

ssm+vue的高校学生课堂考勤系统设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的高校学生课堂考勤系统设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转…

开发知识点-NodeJs-npm/Pnpm/Vite/Yarn包管理器

包管理器 vue-cli-service 不是内部或外部命令&#xff0c;也不是可运行的程序npm 全局变量pnpmPnpm介绍ViteYarn ‘vue-cli-service’ 不是内部或外部命令&#xff0c;也不是可运行的程序 yarn yarn add vue-amap yarn add vue-amap ant-design-vue npm 全局变量 换主机 新…

AVL树的插入详解

AVL树 为什么有AVL树的出呢&#xff1f;其实我们用的map/multimap/set/multiset的底层都是二叉搜索树&#xff0c;但是二叉搜索树有一个很大的缺陷&#xff0c;就是当往树中插入的元素有序或者接近有序&#xff0c;二叉搜索树就会退化成单支树&#xff0c;时间复杂度会退化成…

计算机服务器中了locked勒索病毒怎么办,勒索病毒解密,数据恢复

随着网络技术的不断成熟&#xff0c;网络中存在的病毒威胁也不断增多&#xff0c;近期&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的计算机服务器数据库遭到了勒索病毒攻击&#xff0c;并且勒索病毒的攻击与加密形式也发生了许多变化。其中攻击次数较…

记一次 Android 周期性句柄泄漏的排查

滴滴国际化外卖 Android 商户端正常迭代版本过程中&#xff0c;新版本发布并且线上稳定一段时间后&#xff0c;突然触发线上 Crash 报警。 第一次排查发现是在依赖的底层平台 so 库中崩溃&#xff0c;经过沟通了解到其之前也存在过崩溃问题&#xff0c;所以升级相关底层 so 版本…

Linux mx6ull-驱动(1)hello

编写第一个驱动&#xff0c;hello_drv 一、获取内核、编译内核。 这里为什么要获取内核呢&#xff0c;因为我们写的是驱动程序&#xff0c;而不是裸机程序。也就是我们的板子已经烧入进去了uboot、内核&#xff0c;根文件。然后我们要在这个板子的内核的基础上&#xff0c;来…

【uniapp】签名组件,兼容vue2vue3

网上找了个源码改吧改吧&#xff0c;清除了没用的功能和兼容性&#xff0c;基于uniapp开发的 样子 vue2 使用方法&#xff0c;具体的可以根据业务自行修改 <signature ref"signature" width"100%" height"410rpx"></signature>confi…

[鹏程杯2023]复现

SecretShare X的20个值和R的21个值已经被全部泄露&#xff0c;X和R都是1024bit的值&#xff0c;此时X总共泄露了32*20 640&#xff0c;于是&#xff0c;此时我们可以使用mt19937将其还原&#xff0c;还原之后&#xff0c;我们往前推20个1024bit的值&#xff0c;便可以求得A的…

C语言 预处理详解

目录 1.预定义符号 2.#define 2.1#define 定义标识符 2.2#define 定义宏 2.3#define 替换规则 2.4#和## 2.4.1# 的作用 2.4.2## 的作用 2.5 带有副作用的宏参数 2.6宏和函数的对比 对比 **2.7内联函数 2.8命名约定 3.#undef **4.命令行定义 5.条件编译 常…

AVL树性质和实现

AVL树 AVL是两名俄罗斯数学家的名字&#xff0c;以此纪念 与二叉搜索树的区别 AVL树在二叉搜索树的基础上增加了新的限制&#xff1a;需要时刻保证每个树中每个结点的左右子树高度之差的绝对值不超过1 因此&#xff0c;当向树中插入新结点后&#xff0c;即可降低树的高度&…

闪客网盘系统源码,已测试对接腾讯COS及本地和支付(支持限速+按时收费+文件分享+可对接易支付)- 修复版

正文概述 资源入口 支持对文件下载限速 对接易支付 推广赚钱啥的功能 源码非常的好 支持腾讯cos 阿里云cos 本地储存 远程存储 源码仅支持服务器搭建 php7.2 伪静态thinkphp 运行目录public 导入数据库 修改config目录下的database.php数据库信息 后台地址&#xff1a; 域名/ad…

如何在CentOS上安装SQL Server数据库并通过内网穿透工具实现远程访问

文章目录 前言1. 安装sql server2. 局域网测试连接3. 安装cpolar内网穿透4. 将sqlserver映射到公网5. 公网远程连接6.固定连接公网地址7.使用固定公网地址连接 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;…

CLIP Surgery论文阅读

CLIP Surgery for Better Explainability with Enhancement in Open-Vocabulary Tasks&#xff08;CVPR2023&#xff09; M norm ⁡ ( resize ⁡ ( reshape ⁡ ( F i ˉ ∥ F i ‾ ∥ 2 ⋅ ( F t ∥ F t ‾ ∥ 2 ) ⊤ ) ) ) M\operatorname{norm}\left(\operatorname{resize}\…

文件包含 [ZJCTF 2019]NiZhuanSiWei1

打开题目 代码审计 if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")){ 首先isset函数检查text参数是否存在且不为空 用file_get_contents函数读取text制定的文件内容并与welcome to the zjctf进行强比较 echo "<br><h…