IOS Swift 从入门到精通:数组,集合,元组,对比,字典,枚举

目录

数组

集合

元组

Arrays vs sets vs tuples

字典 

字典默认值

创建空集合

枚举

枚举关联值

枚举原始值

复杂类型:总结


数组

数组是存储为单个值的值的集合。例如,John、Paul、George 和 Ringo 是姓名,但数组可让您将它们分组为单个值,即 The Beatles。

在代码中我们这样写:

 

let john = "John Lennon"

let paul = "Paul McCartney"

let george = "George Harrison"

let ringo = "Ringo Starr"

let beatles = [john, paul, george, ringo]

最后一行构成了数组:它以括号开始和结束,数组中的每个项目都以逗号分隔。

您可以通过在括号内写入数字来从数组中读取值。数组位置从 0 开始计数,因此,如果您想读取“Paul McCartney”,则可以这样写:

 

beatles[1]

注意:如果读取不存在的项目,Swift 会崩溃。例如,尝试读取beatles[9]是一个坏主意。

注意:如果您使用类型注释,则数组将写在括号中:[String],,,和。[Int][Double][Bool]

集合

集合就像数组一样是值的集合,但它们有两个区别:

  1. 物品不按任何顺序存储;它们以有效的随机顺序存储。

  2. 同一集合内的任何物品都不能出现两次;所有物品都必须是唯一的。

您可以直接从数组创建集合,如下所示:

 

let colors = Set(["red", "green", "blue"])

当你查看 Playground 输出中的值时,colors你会发现它与我们创建它的顺序不匹配。它实际上不是随机顺序,只是无序的——Swift 不保证它的顺序。因为它们是无序的,所以你不能像数组那样使用数字位置从集合中读取值。

如果您尝试将重复项插入到集合中,则重复项将被忽略。例如:

 

let colors2 = Set(["red", "green", "blue", "red", "blue"])

最终的colors2集合仍然只包含红色、绿色和蓝色各一次。

元组

元组允许你将多个值存储在一个值中。这听起来可能像数组,但元组有所不同:

  1. 您不能在元组中添加或删除项目;它们的大小是固定的。

  2. 您不能更改元组中项目的类型;它们始终具有与创建时相同的类型。

  3. 您可以使用数字位置或命名来访问元组中的项目,但 Swift 不允许您读取不存在的数字或名称。

通过将多个项目放在括号中来创建元组,如下所示:

 

var name = (first: "Taylor", last: "Swift")

然后,您可以使用从 0 开始的数字位置访问项目:

 

name.0

或者您可以使用名称来访问项目:

 

name.first

请记住,创建元组后,您可以更改其中的值,但不能更改值的类型。因此,如果您尝试将其更改name为,(first: "Justin", age: 25)则会收到错误。

Arrays vs sets vs tuples

数组、集合和元组乍一看似乎很相似,但它们的用途却截然不同。为了帮助您了解应该使用哪种,以下是一些规则。

如果您需要一个特定的、固定的相关值集合,其中每个项目都有精确的位置或名称,那么您应该使用元组:

 

let address = (house: 555, street: "Taylor Swift Avenue", city: "Nashville")

如果您需要一个必须唯一的值的集合,或者您需要能够非常快速地检查特定项目是否存在,则应使用集合:

 

let set = Set(["aardvark", "astronaut", "azalea"])

如果您需要一个可以包含重复项的值集合,或者项目的顺序很重要,那么您应该使用数组:

 

let pythons = ["Eric", "Graham", "John", "Michael", "Terry", "Terry"]

数组是迄今为止三种类型中最常见的。

字典 

字典就像数组一样是值的集合,但是它不是用整数位置来存储东西,而是可以使用任何您想要的方式访问它们。

存储字典数据的最常见方式是使用字符串。例如,我们可以创建一个字典,使用歌手的名字来存储歌手的身高:

 

let heights = ["Taylor Swift": 1.78,"Ed Sheeran": 1.73]

就像数组一样,字典以括号开头和结尾,每个项目都用逗号分隔。但是,我们还使用冒号将要存储的值(例如 1.78)与要将其存储在其下的标识符(例如“Taylor Swift”)分隔开。

这些标识符被称为,你可以使用它们从字典中读取数据:

 

heights["Taylor Swift"]

注意:使用类型注释时,字典写在括号中,标识符和值类型之间用冒号隔开。例如,[String: Double][String: String]

字典默认值

如果您尝试使用不存在的键从字典中读取值,Swift 将返回nil任何内容。虽然这可能是您想要的,但还有另一种选择:我们可以为字典提供一个默认值,以便在我们请求缺少的键时使用。

为了证明这一点,让我们创建一个两个人最喜欢的冰淇淋的词典:

 

let favoriteIceCream = ["Paul": "Chocolate","Sophie": "Vanilla"]

我们可以这样理解保罗最喜欢的冰淇淋:

 

favoriteIceCream["Paul"]

但是如果我们尝试读取 Charlotte 最喜欢的冰淇淋,我们会得到 nil,这意味着 Swift 没有该键的值:

 

favoriteIceCream["Charlotte"]

我们可以通过给字典一个默认值“Unknown”来解决这个问题,这样当没有找到 Charlotte 的冰淇淋时,我们得到的是“Unknown”而不是 nil:

 

favoriteIceCream["Charlotte", default: "Unknown"]

创建空集合

数组、集合和字典被称为集合,因为它们将值集中在一个地方。

如果要创建一个空集合,只需写下其类型,然后加上开括号和闭括号即可。例如,我们可以创建一个空字典,其中键和值都是字符串,如下所示:

 

var teams = [String: String]()

然后我们可以稍后添加条目,如下所示:

 

teams["Paul"] = "Red"

类似地,您可以创建一个空数组来存储整数,如下所示:

 

var results = [Int]()

例外情况是创建空集,其操作方式不同:

 

var words = Set<String>()var numbers = Set<Int>()

这是因为 Swift 仅对字典和数组有特殊的语法;其他类型必须使用尖括号语法,如集合。

如果需要,您可以使用类似的语法创建数组和字典:

 

var scores = Dictionary<String, Int>()

var results = Array<Int>()

枚举

枚举(通常称为枚举)是一种定义相关值组的方法,使其更易于使用。

例如,如果您想编写一些代码来表示您正在执行的某项工作的成功或失败,您可以将其表示为字符串:

 

let result = "failure"

但如果有人意外地使用了不同的命名会发生什么?

 

let result2 = "failed"

let result3 = "fail"

这三个都是不同的字符串,因此它们的含义也不同。

使用枚举,我们可以定义一个Result可以是success或 的类型failure,如下所示:

 

enum Result {

case success

case failure

}

现在当我们使用它时,我们必须选择以下两个值之一:

 

let result4 = Result.failure

这可以防止您每次意外使用不同的字符串。

枚举关联值

除了存储简单值之外,枚举还可以存储与每个案例关联的值。这样您就可以将其他信息附加到枚举中,以便它们可以表示更细微的数据。

例如,我们可以定义一个存储各种活动的枚举:

 

enum Activity {

case bored

case running

case talking

case singing }

也就是说,我们可以说某人在说话,但我们不知道他们在说什么或者我们可以知道某人在跑步,但我们不知道他们要跑到哪里

枚举关联值让我们添加这些额外的细节:

 

enum Activity {

case bored

case running(destination: String)

case talking(topic: String)

case singing(volume: Int) }

现在我们可以更精确了——我们可以说有人在谈论足球:

枚举原始值

有时您需要能够为枚举赋值,以便它们有意义。这让您可以动态创建它们,并以不同的方式使用它们。

例如,您可以创建一个Planet枚举来存储每种情况的整数值:

 

enum Planet: Int {

case mercury

case venus

case earth

case mars

}

Swift 会自动为每一个元素分配一个从 0 开始的数字,你可以使用该数字来创建相应枚举实例的实例。例如,earth将分配数字 2,因此你可以这样写:

 

let earth = Planet( rawValue: 2)

如果需要,您可以为一个或多个案例分配特定值,Swift 将生成其余值。我们不太自然地将地球视为第二颗行星,因此您可以这样写:

 

enum Planet: Int {

case mercury = 1

case venus

case earth

case mars }

现在 Swift 将分配 1mercury并从那里向上计数,这意味着earth现在是第三颗行星。

复杂类型:总结

让我们总结一下:

  1. 数组、集合、元组和字典可让您将一组项目存储在单个值下。它们各自以不同的方式实现这一点,因此您使用哪种方式取决于您想要的行为。

  2. 数组按照添加项目的顺序存储项目,并且您可以使用数字位置访问它们。

  3. 设置存储项目无任何顺序,因此您无法使用数字位置访问它们。

  4. 元组的大小是固定的,你可以给每个项目附加名称。你可以使用数字位置或使用你的名字来读取项目。

  5. 字典根据键存储项目,您可以使用这些键读取项目。

  6. 枚举是一种对相关值进行分组的方法,因此您可以在使用它们时不会出现拼写错误。

  7. 您可以将原始值附加到枚举,以便可以从整数或字符串创建它们,或者可以添加关联值来存储有关每种情况的附加信息。

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

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

相关文章

外贸真相:外贸依然属于高薪行业

转自&#xff1a;外贸人Vicky 大家好&#xff0c;我是你们的外贸博主&#xff0c;一个拥有12年外贸经验的外贸人。今天&#xff0c;我要跟大家深入聊聊如何在这个充满挑战和机遇的行业中实现高薪梦想 首先&#xff0c;让我们从我初入外贸行业的故事开始。那时候&#xff0c;我…

富格林:严格阻挠防备欺诈陷阱

富格林悉知&#xff0c;在投资领域中&#xff0c;现货黄金交易因其保值属性和全球流动性而备受青睐。然而&#xff0c;要想在这一市场中取得成功&#xff0c;投资者不仅需要了解基本的市场知识&#xff0c;更要学会如何阻挠防备欺诈陷阱。以下是一些有助于大家阻挠防备欺诈陷阱…

书生·浦语大模型LagentAgentLego智能体应用搭建 第二期

文章目录 智能体概述智能体的定义智能体组成智能体范式 环境配置Lagent&#xff1a;轻量级智能体框架实战Lagent Web Demo用 Lagent 自定义工具 AgentLego&#xff1a;组装智能体“乐高”直接使用AgentLego作为智能体工具使用 用 AgentLego 自定义工具 智能体概述 智能体的定义…

网络编程之XDP技术的基础eBPF

一、XDP和TC的技术支撑 在前面分析了XDP和TC技术&#xff0c;从它们的细节里可以看出&#xff0c;它们都在调用eBPF的钩子函数。那么eBPF是什么呢&#xff1f;在2021年曾经写过一篇《eBPF介绍》的初级文章&#xff0c;对eBPF做了一个入门级的普及。但是未曾在技术层面上进行展…

win制作git局域网仓库,克隆

仓库目录制作成共享文件 共享目录\USER-20230725LO 然后win使用git克隆\USER-20230725LO\git\wbrj

发布微信小程序需要icp证吗?

微信小程序需要办理ICP许可证吗&#xff1f; 微信小程序需不需要办理ICP许可证&#xff0c;具体要看你的小程序类目是什么&#xff0c;还要看你的小程序具体是做什么的&#xff1f; 根据《互联网信息服务管理办法》 第四条 国家对经营性互联网信息服务实行许可制度&#xff1b…

ffmpeg windows系统详细教程

视频做预览时黑屏&#xff0c;但有声音问题解决方案。 需要将 .mp4编成H.264格式的.mp4 一般上传视频的站点&#xff0c;如YouTube、Vimeo 等&#xff0c;通常会在用户上传视频时自动对视频进行转码&#xff0c;以确保视频能够在各种设备和网络条件下流畅播放。这些网站通常…

【深度学习】python之人工智能应用篇——图像生成

图像生成是计算机视觉和计算机图形学领域的一个重要研究方向&#xff0c;它指的是通过计算机算法和技术生成或合成图像的过程。随着深度学习、生成模型等技术的发展&#xff0c;图像生成领域取得了显著的进步&#xff0c;并在多个应用场景中发挥着重要作用。 概述 图像生成技…

以10位明星为你献上的祝福视频为标题的科普介绍文章-华媒舍

祝福视频的意义和影响 祝福视频是指明星通过录制的视频&#xff0c;向观众表达美好的祝愿和关怀。这种视频以真挚的情感和鼓舞人心的话语&#xff0c;给人们带来了不同寻常的温暖和感动。由于明星的影响力和号召力&#xff0c;他们的祝福视频可以更广泛地传播&#xff0c;让更…

Android进阶:Bitmap的高效加载和Cache

二、Android中的缓存策略 缓存策略在Android中应用广泛。使用缓存可以节省流量、提高效率。 加载图片时&#xff0c;一般会从网络加载&#xff0c;然后缓存在存储设备上&#xff0c;这样下次就不用请求网络了。并且通常也会缓存一份到内存中&#xff0c;这样下次可以直接取内存…

C# 中的隐式和显式类型转换

当你需要转换值的类型时&#xff0c;可以使用类型转换。只有当你要转换的两种类型兼容时&#xff0c;才有可能。 当你收到错误“无法隐式将一种类型转换为另一种类型”时&#xff0c;说明你转换的两种类型不兼容。 int integer; // 声明一个名为 integer 的整型变量 integer …

项目启动 | 盘古信息助力鼎阳科技开启智能制造升级新征程

在全球数字化浪潮不断涌动的背景下&#xff0c;电子信息行业正迎来转型升级的关键阶段。近日&#xff0c;盘古信息与深圳市鼎阳科技股份有限公司&#xff08;简称“鼎阳科技”&#xff0c;股票代码&#xff1a;688112&#xff09;正式启动了IMS数字化智能制造工厂项目&#xff…

OpenFeign服务调用与负载均衡

目录 介绍使用高级特性超时控制重试机制默认HttpClient修改请求/响应报文压缩日志打印功能 相关文献 介绍 官网说明&#xff1a; Feign 是一个声明式 Web 服务客户端。它使编写 Web 服务客户端变得更加容易。要使用 Feign&#xff0c;请创建一个接口并对其进行注释。它具有可…

MacOS|Linux 下搭建LVGL仿真器

0.前置条件&#xff0c;保证电脑已经安装cmake&#xff0c;sdl2. #ubuntu下的SDL2完整所有工具包sudo apt-get install libsdl2-2.0 sudo apt-get install libsdl2-dev apt-get install libsdl2-mixer-dev sudo apt-get install libsdl2-image-dev sudo apt-get install libs…

C++——unordered_map讲解

文章目录 unordered_map讲解1. 引入头文件2. 基本概念3. 声明和初始化4. 基本操作插入元素访问元素删除元素查找元素迭代器 5. 注意事项6. 总结 unordered_map讲解 <unordered_map> 是 C 标准库中的一个头文件&#xff0c;提供了哈希表的实现&#xff0c;即无序关联容器…

超参数调优-通用深度学习篇(上)

文章目录 深度学习超参数调优网格搜索示例一&#xff1a;网格搜索回归模型超参数示例二&#xff1a;Keras网格搜索 随机搜索贝叶斯搜索 超参数调优框架Optuna深度学习超参数优化框架nvidia nemo大模型超参数优化框架 参数调整理论&#xff1a; 黑盒优化&#xff1a;超参数优化…

【Unity导航系统】Navigation组件的概念及其使用示例

Unity中的Navigation组件是一套用于创建和控制导航网格&#xff08;NavMesh&#xff09;的工具&#xff0c;允许游戏对象&#xff08;特别是AI代理&#xff0c;如NavMeshAgent&#xff09;在复杂的3D环境中进行自动寻路。Navigation组件主要包括以下几个方面&#xff1a; Navi…

CSDN低质量分文章自动化获取

1. 背景 最近粉丝终于达到了5K&#xff0c;可是仍然无法通过优质作者申请&#xff0c;原来是平均质量分较低&#xff0c;优化了一些文章后分数提高仍然较慢&#xff0c;所以需要批量获取低质量文章&#xff0c;重点优化 2. 目标效果 3. 核心代码 其中的Cookie可以根据浏览器…

BFS【2】迷宫

目录 迷宫 走到右下角最短路径长度 走到右下角最短路径 跨步迷宫 迷宫 走到右下角最短路径长度 我是和上一篇一样&#xff0c;创建一个队列&#xff0c;不过while 里面判责是queue非空&#xff0c;否则会死循环万一是死路的话。 也是要判断不要重复入队。 #include <…

车联网文章合集

文章来源如下&#xff1a; 汽车ECU介绍浅谈域控制器整车5大域控制器智能座舱域控制器车身域控制器汽车T-BOX介绍