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

news2024/11/25 16:46:34

系列文章目录

第一章: 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十分钟理解回归测试(Regression Testing)

回归测试是一个系统的质量控制过程&#xff0c;用于验证最近对软件的更改或更新是否无意中引入了新错误或对以前的功能方面产生了负面影响&#xff08;比如你在家中安装了新的空调系统&#xff0c;发现虽然新的空调系统可以按预期工作&#xff0c;但是本来亮的等却不亮了&#…

Leetcode刷题【hot100】盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容器。 示例…

单例模式 rust和java的实现

文章目录 单例模式介绍应用实例&#xff1a;优点使用场景 架构图JAVA 实现单例模式的几种实现方式 rust实现 rust代码仓库 单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是最简单的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建…

uboot 和 内存地址

前言 在使用 uboot 升级的时候&#xff0c;有个疑问&#xff1a; 通过 tftp 下载的 bin 文件&#xff0c;我该暂存在哪段内存空间&#xff1f;换句话说&#xff0c;哪段内存空间可供我存放临时数据&#xff1f; 带着这个疑问&#xff0c;开启今天的 uboot 和 内存地址 研究之旅…

CSS特效004:hover图片,显示文字或附加层

css实战中&#xff0c;时常会碰见鼠标放在某个区块上&#xff0c;显示出一段文字或者其他附加信息。思路是利用position的层叠关系&#xff0c;将文字层放在图片的上面&#xff0c;display:none; hover的时候层 display&#xff1a;block。 效果图 源代码 /* * Author: 大剑师…

NR UE capability FeatureSetCombination的查看方法

下面是UEcapability中根据协议中的描述总结的NR CA和EN-DC组合的查看方法&#xff0c;主要内容在38.331/36.331中。比较关键的IE就是FeatureSetCombination。 FeatureSetCombination对应的是FeatureSet entries的二维矩阵。 每个FeatureSetsPerBand 包含适用于相关band combin…

伦敦金股票代码是什么?

伦敦金是跟踪实时的现货黄金价格走势的差价合约交易&#xff0c;它的代码一般是LLG、GOLD&#xff0c;但也有一些货币交易平台会显示为XAU。伦敦金不是股票交易&#xff0c;因此没有四位数或六位数的股票代码&#xff0c;但伦敦金交易品种单一&#xff0c;投资者不用在数千支股…

亚马逊云科技海外服务器初体验

目录 前言亚马逊云科技海外服务器概述注册使用流程实例创建性能表现用户体验服务支持初体验总结 前言 随着云原生技术的飞速发展&#xff0c;越来越多的企业和开发者选择云服务器来作为自己的使用工具&#xff0c;云原生技术的发展也促进了云服务厂商的产品发展&#xff0c;所…

CSS3 2D、3D转换

一、CSS3 2D转换&#xff1a; CSS3转换可以对元素进行移动、缩放、转动、拉长或拉伸。 2D变换的方法&#xff1a;translate()、rolate()、scale()、skew()、matrix()。 <style> div { width:200px; height:100px; background-color:red; /* Rotate div */ tran…

创新功能点展望:探索未来一对一交友App开发的趋势和可能性

随着社交媒体和科技不断进步&#xff0c;一对一交友App开发正处于迅猛发展的阶段。未来&#xff0c;这一领域将出现许多激动人心的创新&#xff0c;为用户带来更加个性化、安全、以及富有情感连接的体验。以下将探讨一些可能性和趋势&#xff0c;以及从中受益的用户和开发者。 …

自动计算零售数据分析指标?BI软件表示可行

随着BI技术的飞速发展&#xff0c;借助系统来计算分析指标也不是什么难事&#xff0c;即便是面对组合多变的零售数据分析指标&#xff0c;奥威BI软件也依旧可以又快又精准地完成指标计算。 BI软件可以自动计算零售数据分析指标&#xff0c;如销售额、库存量、订单量等。在计算…

MyBatis中文网

MyBatis中文网https://mybatis.net.cn/ MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Ja…

软件测试|MySQL WHERE条件查询详解:筛选出需要的数据

简介 在数据库中&#xff0c;我们常常需要从表中筛选出符合特定条件的数据&#xff0c;以便满足业务需求或获取有用的信息。MySQL提供了WHERE条件查询&#xff0c;使我们能够轻松地筛选数据。本文将详细介绍MySQL WHERE条件查询的用法和示例&#xff0c;帮助大家更好地理解和应…

[工业自动化-7]:西门子S7-15xxx编程 - PLC主站 - 电源模块

目录 前言&#xff1a; 一、主站电源PM VS PS 1.1 主站PM电源模块(PM) 1.2 主站PS电源模块 1.3 PM/PS电源模块区别 1.4 如何选择PM/PS电源 1.5 什么时候必须使用PM模块 1.6 什么时候必须使用PS模块 二、背板总线 三、电源模块的安装 前言&#xff1a; 一、主站电源PM…

制作一个用户登录界面

Flask-WTF扩展使用Python类来表示web表单。表单类只是将表单的字段定义为类变量。 再次考虑到分离的问题&#xff0c;我将使用一个新的app/forms.py模块来存储我的web表单类。首先&#xff0c;让我们定义一个用户登录表单&#xff0c;它要求用户输入用户名和密码。表单还将包括…

【C++】类和对象的关系,对象的存储方式以及对象内存的计算

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

【编程实践】黑框框里的打字小游戏,但是汇编语言

开始&#xff1a; 在学习王爽的《汇编语言》的过程中&#xff0c;我就真切地体会到编程实践对于理解的帮助。起初我没有安装书中的实验环境&#xff0c;看到100页左右就开始感觉无趣、吃力&#xff0c;看了后面忘前面&#xff0c;差点就要放弃这本书的学习。好在我后来还是装好…

苹果Ios系统app应用程序开发者如何获取IPA文件签名证书时需要注意什么?

今天呢想和大家介绍介绍苹果App开发者如何获取IPA文件签名证书的步骤和注意事项。对于苹果应用程序开发者而言&#xff0c;获取IPA文件签名证书是发布应用程序至App Store的重要步骤之一。签名证书能够确保应用程序的安全性和可信度&#xff0c;并使其能够在设备上正确运行。 …

芯驰科技出席2023云栖大会,探讨新汽车舱驾融合

10月31日-11月2日&#xff0c;2023云栖大会在杭州成功举办&#xff0c;全场景智能车芯引领者芯驰科技受邀参加斑马智行专场。 芯驰科技资深产品市场总监金辉在「新汽车舱驾融合趋势」研讨会上发表了主题演讲。在随后举办的圆桌论坛上&#xff0c;他和来自智能汽车域控制器、操…

机器学习 - 决策树:技术全解与案例实战

目录 一、引言二、决策树基础决策树模型概述构建决策树的关键概念特征选择决策树的生成 决策树的剪枝 三、算法研究进阶提升树和随机森林提升树&#xff08;Boosted Trees&#xff09;随机森林&#xff08;Random Forests&#xff09; 进化算法与决策树决策树结构的进化 多目标…