Swift中枚举的高级用法

Swift中的枚举(Enum)可以有一些高级用法,以下是一些常见的用法:

1.关联值(Associated Values):枚举的成员可以关联一个或多个值。这样可以给枚举成员提供更多的信息,并且可以根据不同的关联值来执行不同的逻辑操作。

示例:

enum Status {case successcase failure(errorCode: Int)case loading(progress: Float)
}let success = Status.success
let failure = Status.failure(errorCode: 404)
let loading = Status.loading(progress: 0.5)

2.原始值(Raw Values):枚举的成员可以使用原始值来进行比较和判断。原始值可以是字符串、整数、浮点数等。

示例:

enum Direction: String {case north = "N"case south = "S"case east = "E"case west = "W"
}let direction = Direction.north
print(direction.rawValue) // 输出 "N"

3.递归枚举(Recursive Enumerations):枚举的成员可以是自身类型的关联值。递归枚举通常用于描述具有递归结构的数据类型,例如树或链表。

示例:

enum LinkedList<T> {case emptyindirect case node(value: T, next: LinkedList<T>)
}let list = LinkedList.node(value: 1, next: .node(value: 2, next: .empty))

4.协议(Protocol)扩展:枚举可以遵循协议并实现协议中的方法和属性。

示例:

protocol Printable {var description: String { get }
}enum Weekday: Printable {case monday, tuesday, wednesday, thursday, friday, saturday, sundayvar description: String {switch self {case .monday:return "Monday"case .tuesday:return "Tuesday"case .wednesday:return "Wednesday"case .thursday:return "Thursday"case .friday:return "Friday"case .saturday:return "Saturday"case .sunday:return "Sunday"}}
}let today = Weekday.monday
print(today.description) // 输出 "Monday"

这些是Swift中枚举的一些高级用法。根据实际需求,你可以使用这些特性来更好地组织和处理数据。

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

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

相关文章

ICLR 2024 | FTS-Diffusion: 用于合成具有不规则和尺度不变模式的金融时间序列的生成框架

ICLR 2024 | FTS-Diffusion: 用于合成具有不规则和尺度不变模式的金融时间序列的生成框架 原创 QuantML QuantML 2024-04-17 09:53 上海 Content 本文提出了一个名为FTS-Diffusion的新颖生成框架&#xff0c;用于模拟金融时间序列中的不规则和尺度不变模式。这些模式由于其独…

解释器模式:构建领域特定语言的强有力工具

在软件开发中&#xff0c;我们经常需要处理表达式或语言的解析。解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;用于设计一个能够解释特定语言中语句的语法的框架。这种模式特别适合于构建领域特定语言&#xff08;DSL&#xff09;&a…

在 Rust 中实现零知识多方计算

在本教程中&#xff0c;我们将使用 Rust 和多方计算的概念实现一个简化的类似 zk-rollup 的系统。 该系统涉及三个主要组件&#xff1a;用于提交交易的用户界面、用于批量交易并生成证明的证明器&#xff08;或操作器&#xff09;以及检查这些证明的验证器&#xff08;类似于主…

esp32s3中使用双通道通信解决TCP粘包问题

在使用esp32 idf例程中的tcp_server和tcp_client通信测试时发现&#xff0c; 在tcp_server端&#xff0c;接收到一帧数据之后必须马上回复至少一个字节&#xff0c;才能保证每帧数据不粘包&#xff0c; 如果不回复操作&#xff0c;300ms以内的通信时延会导致tcp严重粘包&…

C++三大特性之一:继承

文章目录 前言一、继承方式二、继承类型继承中构造和析构的顺序继承中的内存分配多继承语法(非重点)继承中同名静态成员的处理继承一般在哪里用到进阶&#xff1a;菱形继承和虚拟继承 总结 前言 C三大特性&#xff1a;继承、多态和封装。继承是面向对象编程的一个核心概念&…

Elastic 网络爬虫:为你的网站添加搜索功能

作者&#xff1a;来自 Elastic Lionel Palacin 为了演示如何使用 Elastic 网络爬虫&#xff0c;我们将以一个具体的网站为例&#xff0c;讲解如何在该网站上添加搜索功能。我们将探讨发现网站的方法&#xff0c;并利用 Elastic 网络爬虫提供的功能&#xff0c;以最佳方式准备待…

HTML、CSS常用的vscode插件 +Css reset 和Normalize.css

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 ✍HTML、CSS常用的vscode插件&#x1f34e;1 HTML 标签同步重命名 – Auto Re…

【Java网络编程】网络编程中的基本概念及实现UDP、TCP客户端服务器程序

目录 一、什么是网络编程&#xff1f; 二、网络编程中的基本概念 1. 客户端和服务器 2. 请求和响应 三、Socket套接字 UDP数据报套接字编程 1. DatagramSocket 2. DatagramPacket 3. UDP回显客户端服务器程序 4. UDP字典客户端服务器程序 TCP流套接字编程 1. Serve…

笔记wife_assistant

一、wifi_spi_init //------------------------------------------------------------------------------------------------------------------- // 函数简介 WiFi 模块初始化 // 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式 // 参数说明 *pass…

SpringBoot 3.x + Swagger3 踩坑实录

问题描述 维护的SpringBoot版本是3.0版本&#xff0c;翻教程的时候发现很多SpringBoot2.x版本用的都是springfox&#xff0c;但问题是在SpringBoot3.x版本后&#xff0c;逐渐不支持springfox&#xff0c;强行启动会导致异常&#xff0c;现阶段使用的Springdoc进行替换。 参考…

Java多线程-API

常见API一览 Thread t1 new Thread(() -> {System.out.println("我是线程t1");System.out.println("Hello, World!"); }); t1.start(); // 获取线程名称 getName() // 线程名称默认是Thread-0, Thread-1, ... System.out.println(t1.getName());// 通过…

JVM类加载基本流程及双亲委派模型

1.JVM内存区域划分 一个运行起来的Java进程就是一个JVM虚拟机&#xff0c;这就需要从操作系统中申请一片内存区域。JVM申请到内存之后&#xff0c;会把这个内存划分为几个区域&#xff0c;每个区域都有各自的作用。 一般会把内存划分为四个区域&#xff1a;方法区(也称 "…

【网站项目】党员之家服务系统小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【数字电路与系统】【北京航空航天大学】实验:时序逻辑设计——三色灯开关(二)、需求分析和系统设计

本次实验&#xff08;一&#xff09;见博客&#xff1a;【数字电路与系统】【北京航空航天大学】实验&#xff1a;时序逻辑设计——三色灯开关&#xff08;一&#xff09;、实验指导书 说明&#xff1a;本次实验的代码使用verilog编写&#xff0c;文章中为阅读方便&#xff0c…

指针的使用以及运算、二级指针、造成野指针的原因以及解决方法、指针和数组相互使用

第七章&#xff0c;指针的学习 目录 前言 一、指针的概念 二、指针的类型 三、野指针 四、指针的运算 五、指针和数组的关系以及使用 六、指针数组 七、二级指针 总结 前言 这章主要学习的是指针方面的知识&#xff0c;这节只是简单了解一下指针&#xff0c;并不会深…

uniapp H5项目 获取接口的二进制流转化成图片url(base64)

如果你使用的是uniapp, 并且你从接口获取下来的数据长这样&#xff1a; 想要把取到的数据展示成图片&#xff0c;那么你可以这样做&#xff1a; // 这是我们的项目封装的请求方法const res await this.$api.getKaptcha({originResponse: true, // 这样写是为了在request那边特…

路由器热备份

HSRP HSRP&#xff08;Hot Standby Routing Protocol&#xff09;热备份路由选择协议 HSRP是思科私有的协议&#xff0c;HSRP起到一个双网关热备份的一个目的&#xff0c;不考虑线路问题针对设备而言&#xff0c;一个设备挂了还有另外一台设备&#xff0c;所以双网关也叫双机…

开发手札:Unity+NetMQ集成使用注意事项

netmq docs netmq算是一个轻量级消息库&#xff0c;最近两天用了一下&#xff0c;分享一下注意事项。 1.根据topic区分通信信道&#xff0c;因为二进制中字母大小写值并不相同&#xff0c;所以topic必须区分大小写。 2.Initial强制DotNet模式&#xff1a;Asy…

stl_set

文章目录 set1.关联式容器2.键值对3. set3.1 set介绍3.2 set的使用3.2.1 pair3.2.2 find3.2.3 lower_bound 3.3 multiset3.3.1 multiset的介绍3.3.2 multiset的使用3.3.3 find3.3.4 equal_range3.3.5 erase set 1.关联式容器 在初阶阶段&#xff0c;我们已经接触过STL中的部分…

嵌入式物联网实战开发笔记-乐鑫ESP32芯片功能对比以及功能选型【doc.yotill.com】

乐鑫ESP32入门到精通项目开发参考百例下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1ATvRnAZvxkev-PJfd3EAPg?pwd4e33 提取码&#xff1a;4e33 2.1 初识 ESP32 ESP32-S3 是一款低功耗的 MCU 系统级芯片 (SoC)&#xff0c;支持 2.4 GHz Wi-Fi 和低功耗蓝牙 (…