Swift中枚举的高级用法

news/2024/5/2 18:23:22

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.mrgr.cn/p/14873037

相关文章

面试经典150题——跳跃游戏 II

面试经典150题 day10 题目来源我的题解方法一 动态规划方法二 贪心 题目来源 力扣每日一题&#xff1b;题序&#xff1a;45 我的题解 方法一 动态规划 动态规划&#xff0c;当j位置可达i位置时&#xff1a;dp[i]Math.min(dp[i],dp[j]1); 时间复杂度&#xff1a;O( n 2 n^2 n…

使用 Docker 部署 Draw.io 在线流程图系统

1)介绍 Draw.io GitHub:https://github.com/jgraph/drawioDraw.io 是一款开源的绘制流程图的工具,拥有大量免费素材和模板。程序本身支持中文在内的多国语言,创建的文档可以导出到多种网盘或本地。无论是创建流程图、组织结构图、网络拓扑图还是其他类型的图表,Draw.io 基…

ThinkPHP使用Redis

前置环境 安装Redis 新建一个ThinkPHP6项目 ThinkPHP使用Redis 安装 Redis 扩展 # 在项目目录下执行如下代码,安装redis依赖 composer require topthink/think-redisconfig/database.php redis => [// 默认数据连接标识default => [host => env(redis.hostnam…

【人工智能书籍PDF】TensorFlow机器学习实战指南(书籍分享)

今天又来给大家推荐一本人工智能方面的书籍<TensorFlow机器学习实战指南>。TensorFlow是一个开源机器学习库。本书从TensorFlow的基础开始介绍&#xff0c;涉及变量、矩阵和各种数据源。之后&#xff0c;针对使用TensorFlow线性回归技术的实践经验进行详细讲解。后续章节…

鸿蒙开发TypeScript语言:【Number】

TypeScript 与 JavaScript 类似,支持 Number 对象。 Number 对象是原始数值的包装对象。 语法 var num = new Number(value);注意: 如果一个参数值不能转换为一个数字将返回 NaN (非数字值)。 Number 对象属性 下表列出了 Number 对象支持的属性:序号 属性 & 描述1. MA…

小程序地理位置权限申请+uniapp调用uni.getLocation

文章目录 一、小程序地理位置权限申请二、uniapp调用uni.getLocation 一、小程序地理位置权限申请 登录 微信公众平台 需要确保小程序类目已经填写 点击左侧导航栏找到最后的“设置”——“基本设置”——“前往填写” 在开发管理——接口设置——地理位置中可以看到&#x…

vue3 -- 项目使用自定义字体font-family

在Vue 3项目中使用自定义字体(font-family)的方法与在普通的HTML/CSS项目中类似。可以按照以下步骤进行操作: 引入字体文件: 首先,确保你的字体文件(通常是.woff、.woff2、.ttf等格式)位于项目中的某个目录下,比如src/assets/font/。 在全局样式中定义字体: 在你的全局…

Python 将PDF转为PDF/A和PDF/X,以及PDF/A转回PDF

PDF/A和PDF/X是两种有特定用途的PDF格式&#xff0c;具体查看以下&#xff1a; PDF/A是一种用于长期存档的PDF格式&#xff0c;它旨在确保文档的内容和格式在未来的访问中保持不变。如果您需要对文件进行长期存档&#xff0c;比如法律文件或档案记录&#xff0c;将其转换为PDF…

L2正则化

L2正则化是一种用于机器学习和统计建模中的技术&#xff0c;旨在控制模型的复杂度&#xff0c;并防止过拟合。它通过在模型的损失函数中添加一个惩罚项来实现这一目的。这个惩罚项是模型权重的平方和&#xff0c;乘以一个正则化参数 λ。这样可以迫使模型权重趋向于较小的值&am…

XDEFIANT不羁联盟怎么申请测试 不羁联盟参与测试教程

《不羁联盟》有五个独具特色的阵营可供选择&#xff1a;自由武装、暗影小队、梯队、净化者、DedSec&#xff0c;全部出自育碧知名的角色与世界。无论是拥有“声纳护目镜”超能的梯队探员&#xff0c;还是拥有黑入对手设备能力的 DedSec&#xff0c;每个阵营都有自己的一套独特技…

hook初识之inline hook

文章首发阿里云先知社区:https://xz.aliyun.com/t/14033 什么是 hook hook 翻译过来就是钩子,它用于拦截并改变某个事件或操作的行为,比如我们大家在写 shellcode loader 时,直接使用申请内存,copy 内存等高危操作可能会报毒,然后尝试更换冷门的 api 或者直接使用内核函数…

鸿蒙HarmonyOS实战-ArkUI动画(布局更新动画)

🚀前言 动画是一种通过连续展示一系列静止的图像(称为帧)来创造出运动效果的艺术形式。它可以以手绘、计算机生成或其他各种形式呈现。在动画中,每一帧都具有微小的变化,当这些帧被快速播放时,人眼会产生视觉上的错觉,认为物体在运动。动画可以用来表达故事、观念、想法…

矩阵求导(二)

前面已经介绍了标量对向量和矩阵的求导以及向量和矩阵对标量的求导,现在介绍一下向量和向量之间的求导规则。向量对向量求导不管被求导的向量是行向量还是列向量,我们求导的步骤都是统一的,只要选择了分母布局,其求导结果都是一个与分母同行数的矩阵,而列数则等于分子向量…

Linux架构31 ansible roles角色, ansible galaxy

Ansible Roles角色 1.Ansible Roles基本概述 Roles基于一个已知的文件结构,去自动地加载某些 var_files, tasks 以及 handlers。 Ansible注意事项: 在编写roles的时候,最好能将一个task拆分为一个文件,方便后续复用。(彻底的打散)2.Ansible Roles目录结构 roles官方目录结构…

Mac安装Redis

Mac安装Redis # 安装Homebrew命令,Homebrew安装的软件会默认在/usr/local/Cellar/路径下 # /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" # Homebrew命令安装redis brew install redis启动Redis #方式一:使用brew帮助我…

如何使用 abp 创建 module 并应用单独的数据库迁移

创建 abp 项目 官方文档已经提供了非常详细的新建项目向导。参考:https://docs.abp.io/en/abp/latest/Getting-Started-Create-Solution?UI=Blazor&DB=EF&Tiered=Yes CLI 命令参考:https://docs.abp.io/en/abp/latest/CLI 我们使用 abp CLI 创建一个新项目。我使用 …

今天给大家推荐36套404页面模板

404页面是网站必备的一个页面&#xff0c;它承载着用户体验与SEO优化的重任。当用户访问不存在的页面时&#xff0c;服务器会返回404错误代码&#xff0c;并显示404页面。一个好的404页面可以帮助用户快速找到所需信息&#xff0c;并提升网站的用户体验。 以下是一些演示下载资…

OpenCV从入门到精通实战(六)——多目标追踪

基于原生的追踪 使用OpenCV库实现基于视频的对象追踪。通过以下步骤和Python代码&#xff0c;您将能够选择不同的追踪器&#xff0c;并对视频中的对象进行实时追踪。 步骤 1: 导入必要的库 首先&#xff0c;我们需要导入一些必要的Python库&#xff0c;包括argparse、time、…

redis常见的应用问题以及解决方案

redis中三种缓存问题以及解决方案缓存穿透 问题描述: key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会压到数据源(数据库),从而可能压垮数据源。 用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能…