Swift 使用枚举协议CaseIterable遍历枚举所有值

在Swift中,可以使用.allCases属性来枚举一个符合CaseIterable协议的枚举的所有情况。使用不同的方法,如for-in循环,reduce,filter和map函数,你可以迭代一个枚举。

什么是CaseIterable协议?

CaseIterable是一个用于迭代枚举案例的协议。它为一个枚举自动合成了所有的案例。请记住,这个协议不能应用于关联值的情况。这个协议使你能够使用一个名为allCases的计算属性来访问案例,该属性在一个集合数组中返回所有的案例。

例子

例如,如果你有一个名为MyEnum的枚举,其原始值为字符串-

enum MyEnum: String, CaseIterable {case case1case case2case case3
}

下面是几个例子,说明你如何使用.allCases属性在Swift中用String原始值来枚举一个枚举 −

我们将使用以下方法在Swift中枚举一个带有字符串类型的枚举:

  • 使用for-in循环
  • 使用map函数来创建一个原始值的数组

使用for-in循环

你可以使用for-in循环来迭代一个枚举的情况。你可以使用枚举提供的allCases属性来迭代这些案例。

例子

enum MyEnum: String, CaseIterable {case case1 = "First case"case case2 = "Second case"case case3 = "Third case"
}
for item in MyEnum.allCases {print(item.rawValue)
}

输出

First case
Second case
Third case

在上面的例子中,我们使用CaseIterable协议来迭代枚举的案例。使用for-in循环,以字符串格式迭代allCases。

使用map函数来创建一个原始值的数组

你可以使用map()函数来迭代enum cases。

MyEnum.allCases.map { $0.rawValue }

例子

使用map()函数,你可以转换枚举的rawValue的类型。

enum MyEnum: String, CaseIterable {case case1 = "First case"case case2 = "Second case"case case3 = "Third case"
}
let rawValues = MyEnum.allCases.map { $0.rawValue }
print(rawValues)

输出

["First case", "Second case", "Third case"]

总结

在上面的例子中,使用map()函数来迭代这些案例。同时,我们在map()函数的执行块中为每个案例返回rawValue。

Swift的CaseIterable接口使得列举一个没有相关值的枚举的每个案例变得简单。你可以通过遵守CaseIterable协议和使用allCases属性,将枚举的所有情况作为该枚举类型的集合来访问。

你可以使用枚举提供的allCases属性来迭代一个枚举的所有情况。你可以过滤它们或在所有案例中执行任何其他操作。如果你想转换值的类型,你可以使用map函数来转换它们。在这种情况下,你必须使用rawValue属性。

你应该注意,如果你使用枚举案例的关联值,你就不能迭代案例。对于关联值,CaseIterable协议并不适用。

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

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

相关文章

香港虚拟主机哪里可以试用?用于企业建站的

香港虚拟主机适合个人、企业建站,包括外贸企业网站、个人博客网站、中小企业官网等,那么作为新手不知道哪家香港虚拟主机好用的时候,该如何找到可以试用的香港虚拟主机呢? 香港虚拟主机也称作香港空间、香港虚拟空间,…

【Unity】Unity项目转抖音小游戏(二)云数据库和云函数

业务需求,开始接触一下抖音小游戏相关的内容,开发过程中记录一下流程。 抖音云官方文档:https://developer.open-douyin.com/docs/resource/zh-CN/developer/tools/cloud/develop-guide/cloud-function-debug 1.开通抖音云环境 抖音云地址&a…

C++string 类的常用方法

string (构造函数) (1) default 构造长度为零字符的空字符串。 (2) copy 构造 str 的副本。 (3) substring 复制从字符位置 pos 开始并跨越 len 字符的 str 部分(如果任一 str 太短或 len 为 string::npos,则复制 str 的末尾…

代码随想录训练营Day30:动态规划2

1.62不同路径 dp[i][j]数组的定义:到达坐标(i,j)所需要的路径个数。递推公式:dp[i][j] dp[i-1][j]dp[i][j-1];//到达(i,j)的上一步只能是从上面到或者左边到初始化:对于…

Leaflet.canvaslabel在Ajax异步请求时bindPopup无效的解决办法

目录 前言 一、场景重现 1、遇到问题的代码 2、问题排查 二、通过实验验证猜想 1、排查LayerGroup和FeatureGroup 2、排查Leaflet.canvaslabel.js 三、柳暗花明又一村 1、点聚类的办法 2、歪打正着 总结 前言 在上一篇博客中介绍了基于SpringBoot的全国风景区WebGIS按…

Flutter 中的 Card 小部件:全面指南

Flutter 中的 Card 小部件:全面指南 在 Flutter 中,Card 是一个用于呈现内容的容器,它带有圆角边缘和阴影效果,常用于展示信息块,如用户头像、相册、笔记或任何需要突出显示的内容。Card 小部件提供了一种简单而直观的…

unity---常用API

1. Vector3:结构体由x、y、z这3个数值组成,表示一个向量 magnitude变量返回该向量的长度normalized变量返回 magnitude 为 1 时的该向量zero静态变量Vector3(0, 0, 0)one静态变量Vector3(1, 1, 1)forward静态变量Vector3(0, 0, 1)back静态变量Vector3(0…

Flutter 中的 Stack 小部件:全面指南

Flutter 中的 Stack 小部件:全面指南 在 Flutter 中,Stack 是一个用于叠加多个小部件的布局小部件。它允许你将多个小部件重叠放置,通过控制每个小部件的位置和大小,你可以创建出复杂的布局效果,如徽章图标、对话框、…

pandas DataFrame 常用遍历方法

在Pandas中,可以使用多种方法遍历DataFrame中的数据。以下是几种常见的方法: 基于索引遍历DataFrame的每一行。 基于行号遍历DataFrame的每一行, 该方式通过行号获取行数据信息,格式为Series,无法获取改行的index信息。 使用iterr…

1.8. 离散时间鞅-无界停时定理与随机游走

无界停时定理与随机游走 无界停时定理与随机游走1. 无界停时定理1.1. 一致可积1.2. 非一致可积2. 应用于随机游动-鞅方法2.1. 随机游走构造的鞅2.2. 对称简单随机游走无界停时定理与随机游走 1. 无界停时定理 本节给出一致可积下鞅的无界停时定理,说明一致可积下鞅的停止过程…

Agent AI智能体:未来社会的角色、发展与挑战

Agent AI智能体在未来社会中的角色、发展路径以及可能带来的挑战是一个非常值得关注的话题。让我们来深入探讨一下这些方面。 1. 角色与应用场景 Agent AI智能体是指具有自主决策能力和执行能力的人工智能系统,它们可以代表个人或组织执行各种任务和活动。在未来社…

大学课程中的算法java实现【学习算法】

大学课程中的算法java实现【学习算法】 前言前言推荐离散数学Warshall算法 P102可达性矩阵 P187欧拉图 Fleury算法 P201最小生成树 P234哈夫曼数 P240 数据结构与算法计算机操作系统最后 前言 这是陈旧已久的草稿2023-04-22 23:20:38 这是准备自己用java实现大学课程中所有遇…

免疫优化算法(Immune Optimization Algorithm)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 算法背景 免疫算法是一种模拟生物免疫系统的智能优化算法。想象一下,当我们的身体遇到病毒或细菌侵袭时,免疫系统会启动…

mysql 事物

MySQL中的事务(Transaction)是一个确保数据完整性和一致性的重要概念。它将一组SQL操作捆绑在一起,当作一个单一的工作单元来执行。事务具备以下四个关键特性,即ACID特性: 原子性(Atomicity)&am…

DHCP原理

什么是DHCP DHCP (Dynamic Host Configuration Protocol,动态主机配置协议)是由Internet工作任务小组设计开发的,专门用于为TCP/IP网络中的计算机自动分配TCP/IP参数的协议,是一个应用层协议,使用UDP的67和68端口。 DHCP的前身是B…

Windows下安装 Emscripten 详细过程

背景 最近研究AV1编码标准的aom编码器,编译的过程中发现需要依赖EMSDK,看解释EMSDK就是Emscripten 的相应SDK,所以此博客记录下EMSDK的安装过程;因为之前完全没接触过Emscripten 。 Emscripten Emscripten 是一个用于将 C 和 …

[hpssupfast@mailfence.com].Elbie勒索病毒如何恢复数据和预防

[hpssupfastmailfence.com].Elbie是一种新型勒索病毒,快速恢复重要数据请添加技术服务号(safe130)。以下是关于elbie勒索病毒的详细信息: 病毒介绍: elbie勒索病毒,也称为PHOBOS勒索软件,它通过加密文件并要求支付赎金以恢复对文…

涉案财物管理系统|DW-S405系统全国都有案例

涉案财物管理系统(智财物:DW-S404)是一套成熟系统,依托互3D技术、云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对涉密载体进行统一管理、分析的信息化、智能化、规范化的系统。 涉案财物管理系统主要实现对涉案物品进…

RisingWave基本操作

什么是RisingWave RisingWave 是一款基于 Apache 2.0 协议开源的分布式流数据库。RisingWave 让用户使用操作传统数据库的方式来处理流数据。通过创建实时物化视图,RisingWave 可以让用户轻松编写流计算逻辑,并通过访问物化视图来对流计算结果进行及时、…

分享一个处理大文件效率拉满的神器

🏃‍♂️ 微信公众号: 朕在debugger© 版权: 本文由【朕在debugger】原创、需要转载请联系博主📕 如果文章对您有所帮助,欢迎关注、点赞、转发和订阅专栏! 前言 系统当天有些表的数据需要恢复成前一天的样子,幸好有…