当前位置: 首页 > article >正文

HoRain云--Swift枚举全解析:从基础到高级应用

HoRain 云小助手个人主页⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。目录⛳️ 推荐1. 枚举基础概念2. 原始值与关联值2.1 原始值Raw Values2.2 关联值Associated Values3. 枚举的高级特性3.1 递归枚举3.2 嵌套枚举3.3 枚举与协议4. 枚举的实用技巧4.1 枚举初始化4.2 随机选择枚举成员4.3 位值枚举OptionSet5. 实际应用案例5.1 网络状态管理5.2 游戏开发5.3 SwiftUI路由6. 枚举的最佳实践Swift枚举是一种强大且类型安全的数据类型不仅用于定义命名常量还能通过关联值携带数据、实现方法和协议是构建可维护代码的核心工具。1. 枚举基础概念枚举是Swift中的一等公民类型通过enum关键字定义用于表示一组相关的命名常量。与C/Objective-C等语言的简单整数枚举不同Swift枚举具有以下特点类型安全编译器确保只使用定义的枚举值表达力强可携带关联数据不局限于单一类型行为丰富可包含方法、计算属性和遵循协议// 基本枚举定义 enum Direction { case north, south, east, west } let currentDirection Direction.north2. 原始值与关联值2.1 原始值Raw Values原始值是编译时确定的固定值适用于需要将枚举映射到已知编码体系的场景字符串类型自动使用case名称作为原始值整数类型默认从0开始递增显式赋值可为每个case指定特定值// 字符串原始值 enum HTTPMethod: String { case get GET case post POST case put PUT } print(HTTPMethod.get.rawValue) // GET // 整数原始值 enum Weekday: Int { case monday, tuesday, wednesday, thursday, friday } print(Weekday.monday.rawValue) // 0原始值可通过rawValue属性获取也可使用init(rawValue:)初始化器反向查找但这是一个可失败初始化器返回可选类型。2.2 关联值Associated Values关联值是运行时动态绑定的数据使每个枚举实例可携带不同类型和数量的额外信息enum NetworkResult { case success(Data) case failure(String) case loading } let result NetworkResult.success(Data())关联值通过元组实现可包含任意类型的数据使用switch语句进行安全解构switch result { case .success(let data): print(获取数据: $data.count) 字节) case .failure(let message): print(请求失败: $message)) case .loading: print(加载中...) }关联值特别适合状态建模如网络请求结果、订单状态等复杂场景。3. 枚举的高级特性3.1 递归枚举通过indirect关键字定义允许枚举成员关联自身类型常用于构建树形结构indirect enum ArithmeticExpression { case number(Int) case addition(ArithmeticExpression, ArithmeticExpression) case multiplication(ArithmeticExpression, ArithmeticExpression) } let five ArithmeticExpression.number(5) let sum ArithmeticExpression.addition(five, five)递归枚举是实现链表、二叉树等数据结构的理想选择。3.2 嵌套枚举枚举可嵌套在其他枚举内部创建层次化数据模型enum Shape { case circle(radius: Double) case square(side: Double) enum Color { case red, blue, green } } let myShape Shape.circle(radius: 5.0) let myShapeColor Shape.Color.blue嵌套枚举特别适用于游戏开发中表示角色及其属性或数据处理中表示复杂记录结构。3.3 枚举与协议枚举可遵循协议扩展其功能CaseIterable自动获取所有枚举成员CustomStringConvertible自定义字符串表示Equatable实现相等性比较enum Beverage: CaseIterable { case coffee, tea, juice } print(Beverage.allCases.count) // 3 for beverage in Beverage.allCases { print(beverage) }通过遵循协议枚举可获得额外功能如类型安全的序列化和反序列化。4. 枚举的实用技巧4.1 枚举初始化Swift为枚举提供两种初始化方式构造器初始化自定义初始化逻辑成员值初始化自动为每个case提供初始化方法enum Temperature { case celsius(Double), fahrenheit(Double) init(celsius: Double) { self .celsius(celsius) } init(fahrenheit: Double) { self .fahrenheit(fahrenheit) } } let temp Temperature(celsius: 25.0)4.2 随机选择枚举成员利用CaseIterable协议和随机数生成可轻松实现随机选择功能enum Color { case red, green, blue, yellow, purple, orange } func getRandomColor() - Color { let randomIndex Int.random(in: 0..Color.allCases.count) return Color.allCases[randomIndex] } print(getRandomColor()) // 随机输出一个颜色此技巧可用于游戏开发、UI设计等需要随机选择的场景。4.3 位值枚举OptionSet通过位运算实现组合状态管理struct FilePermission: OptionSet { let rawValue: Int static let read FilePermission(rawValue: 1 0) static let write FilePermission(rawValue: 1 1) static let execute FilePermission(rawValue: 1 2) } let rw: FilePermission [.read, .write] print(rw.rawValue) // 3位值枚举适用于权限管理、配置选项等需要组合多个标志的场景。5. 实际应用案例5.1 网络状态管理枚举完美适用于表示网络请求状态enum NetworkState { case idle case loading case success(Data) case failure(Error) } func updateUI(state: NetworkState) { switch state { case .loading: showLoadingIndicator() case .success(let data): displayData(data) case .failure(let error): showError(error.localizedDescription) default: break } }5.2 游戏开发在游戏开发中枚举可用于表示角色类型及其能力enum Character { case warrior case mage case barbarian enum Ability { case strength case magic case agility } } let player Character.warrior let ability Character.Ability.strength5.3 SwiftUI路由在SwiftUI中枚举可作为类型安全的路由系统enum Route: Hashable { case home case article(id: Int) case settings(debug: Bool) } main struct App: SwiftUI.App { var body: some Scene { WindowGroup { ContentView() .navigationDestination(for: Route.self) { route in switch route { case .home: HomeView() case .article(let id): ArticleView(id: id) case .settings(let debug): SettingsView(debug: debug) } } } } }此模式避免了字符串驱动的导航提供编译时检查和类型安全。6. 枚举的最佳实践有限状态用枚举当状态数量有限且明确时优先使用枚举避免过度嵌套保持枚举结构清晰避免过深层次的嵌套使用CaseIterable需要遍历所有枚举值时遵循此协议合理选择原始值或关联值根据使用场景选择合适的方式避免枚举膨胀当case数量过多时考虑其他数据结构重要提示枚举是值类型在传递时会被复制这与类引用类型不同。对于大型数据结构考虑使用indirect关键字或混合使用枚举与类来优化内存使用。Swift枚举远不止是简单的常量集合而是强大的建模工具能够显著提升代码的可读性、可维护性和类型安全性。合理运用枚举的各种特性可以构建出既优雅又健壮的Swift应用。❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧

相关文章:

HoRain云--Swift枚举全解析:从基础到高级应用

🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …...

YOLOv13 前瞻:YOLO 最新改进方向与模块预测(独家分析)

YOLOv13 真的来了吗?如果来了,它会是什么样子? 这是2026年以来,目标检测圈里最热的一个话题。根据 CSDN 社区 2026 年 1-3 月的讨论热度统计,“YOLOv13”相关关键词的搜索量在短短三个月内增长了近 5 倍,开…...

颠覆式英雄联盟效率革命:League-Toolkit智能助手全解析

颠覆式英雄联盟效率革命:League-Toolkit智能助手全解析 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在快节奏的英雄联盟对局中&…...

微信聊天记录数据备份与智能分析一站式解决方案

微信聊天记录数据备份与智能分析一站式解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg 你是否经…...

Python爬虫进阶:多线程优化小说爬虫,速度直接提升10倍(实战完整版)

多线程优化小说爬虫,速度直接提升10倍(实战完整版) 在上一篇博文中,我们实现了一款基础的Python小说爬虫,能够批量爬取小说章节、自动优化排版(还原段落换行、空行格式),并自动创建…...

前端新手天天踩坑?安全老兵带你彻底搞懂HTML“路径引用”与“跳转陷阱”(附实战代码)

我平时在做代码审计和渗透测试时,经常会碰到一类让人哭笑不得的低级Bug:本地测试好好的图片,一部署到服务器上就全部裂开;别人点击网页上的链接,直接报404找不到页面。 这些问题归根结底,都是因为新手没有彻底搞懂 HTML 的**路径(Path)和锚点(Anchor)**规则。很多同…...

零基础入门Speech Seaco Paraformer:一键部署中文语音识别Web界面

零基础入门Speech Seaco Paraformer:一键部署中文语音识别Web界面 1. 语音识别技术简介 语音识别技术(Automatic Speech Recognition, ASR)正在改变我们与设备交互的方式。想象一下,你只需要对着电脑说话,它就能自动…...

基于Python的企业内管信息化系统毕设

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在深入探讨基于Python的企业内管信息化系统的构建与应用,以期为我国企业信息化建设提供理论依据和实践指导。具体研究目的如下: …...

多尺度卷积MCNN和它的一些组合体,MATLAB代码,几个小创新故障诊断模型,

本期带来在故障诊断领域用的比较多的、且效果比较好的一个故障诊断模型---多尺度卷积神经网络MCNN(multi-scale convolutional neural network) 为了方便大家的学习,本期整理了MCNN相关的不同组合网络: 一次性获取上述模型,获取方式移步文章末…...

终极视频修复神器:用Untrunc拯救你的珍贵回忆

终极视频修复神器:用Untrunc拯救你的珍贵回忆 【免费下载链接】untrunc Restore a damaged (truncated) mp4, m4v, mov, 3gp video. Provided you have a similar not broken video. 项目地址: https://gitcode.com/gh_mirrors/unt/untrunc 你是否曾经遇到过…...

zookeeper 常用命令之zkCli

简介:介绍zkCli客户端非常常用的命令 zkCli.sh 不填后面的参数,默认连接的就是localhost:2181zk节点类似Linux的目录,比如/uar/local,-s表示持久的节点,-e是临时的节点。data是往这个节点里面放入哪些数据&#xff0c…...

AI开发-python-langchain框架(--AI 直接生成并执行 Python 代码 )遣

指令替换 项目需求:将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一,测试代码示例 test.c // test.c…...

疲劳驾驶司机异常驾驶行为检测及预警系统 1.开放全部源代码,可自行进行修改 2.提供完整程序打...

疲劳驾驶司机异常驾驶行为检测及预警系统 1.开放全部源代码,可自行进行修改 2.提供完整程序打包软件.exe,不用任何编译环境,直接点开就能运行 3.包括疲劳检测(打哈欠,低头,闭眼),人脸…...

JPEXS Free Flash Decompiler:终极SWF反编译与资源提取工具完全指南

JPEXS Free Flash Decompiler:终极SWF反编译与资源提取工具完全指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler JPEXS Free Flash Decompiler 是一款功能强大的开源Flas…...

类、实例、成员与子类:四个最容易混淆的基础概念

在知识表示、知识图谱和本体建模中,“类”“实例”“成员”“子类”是最常用的几个基础概念,也是最容易混淆的一组概念。很多初学者会把“实例”和“成员”混为一谈,把“子类关系”和“成员关系”混为一谈,甚至把“类”和“实例”…...

BetterGenshinImpact多开终极指南:如何同时管理多个原神账号

BetterGenshinImpact多开终极指南:如何同时管理多个原神账号 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连音…...

实战深度:游戏框架渲染冲突问题全解析与解决方案

实战深度:游戏框架渲染冲突问题全解析与解决方案 【免费下载链接】REFramework Mod loader, scripting platform, and VR support for all RE Engine games 项目地址: https://gitcode.com/GitHub_Trending/re/REFramework 一、问题背景:引擎注入…...

双馈风力发电机DFIG滑模控制SMC MATLAB/Simulink仿真模型(成品) 1、采用...

双馈风力发电机DFIG滑模控制SMC MATLAB/Simulink仿真模型(成品) 1、采用非线性控制滑模控制策略 2、采用PI调节器为外环滑模控制器SMC作为内环控制,跟传统的双PI环相比,功率的很随性更好(创新点)双馈风机滑…...

企业级可视化生态系统|关于Highcharts集成的前端框架、后端编程语言与生态

在 Web 开发和数据分析领域,Highcharts 凭借其强大的交互性和美观的视觉效果,早已成为行业标杆。然而,真正让 Highcharts 脱颖而出的,不仅仅是它那 100 多种图表类型,更是其全方位的集成能力(Integrations&…...

突破系统壁垒:AirPodsDesktop让跨平台音频体验无缝融合

突破系统壁垒:AirPodsDesktop让跨平台音频体验无缝融合 【免费下载链接】AirPodsDesktop ☄️ AirPods desktop user experience enhancement program, for Windows and Linux (WIP) 项目地址: https://gitcode.com/gh_mirrors/ai/AirPodsDesktop 打破生态枷…...

Clawdbot对接Qwen3:32B全流程:从Ollama部署到Web聊天界面

Clawdbot对接Qwen3:32B全流程:从Ollama部署到Web聊天界面 1. 项目概述与核心价值 你是否正在寻找一种简单高效的方式,将强大的Qwen3:32B大模型集成到你的工作流程中?本指南将带你完成从Ollama模型部署到Clawdbot Web聊天界面搭建的全过程&a…...

Qwen3-TTS声音设计实战:一句话生成萝莉音,手把手教你搭建语音合成服务

Qwen3-TTS声音设计实战:一句话生成萝莉音,手把手教你搭建语音合成服务 1. 为什么选择Qwen3-TTS进行声音设计? 想象一下,你正在开发一款虚拟偶像APP,需要为角色生成各种风格的语音。传统语音合成方案需要专业录音棚、…...

Lite-Avatar与ChatGPT结合的智能对话系统实现

Lite-Avatar与ChatGPT结合的智能对话系统实现 1. 引言 想象一下,你正在和一个数字人进行视频对话,它不仅能够听懂你的问题,还能用生动的表情和自然的语气回答你,就像和一个真人交流一样。这种体验现在已经不再是科幻电影里的场景…...

Phi-4-mini-reasoning基础教程:Web界面调用+supervisor服务管理详解

Phi-4-mini-reasoning基础教程:Web界面调用supervisor服务管理详解 1. 模型简介 Phi-4-mini-reasoning是一款专注于推理任务的文本生成模型,特别擅长处理需要多步分析和逻辑推导的问题。与通用聊天模型不同,它更专注于"问题输入→推理…...

Krita智能选区插件:AI驱动的图像分割解决方案

Krita智能选区插件:AI驱动的图像分割解决方案 【免费下载链接】krita-vision-tools Krita plugin which adds selection tools to mask objects with a single click, or by drawing a bounding box. 项目地址: https://gitcode.com/gh_mirrors/kr/krita-vision-t…...

OpenClaw学习助手:Phi-3-mini生成错题本实战

OpenClaw学习助手:Phi-3-mini生成错题本实战 1. 为什么需要AI错题本? 去年备考PMP认证时,我发现自己陷入了一个典型的学习困境:做了大量练习题,但错题总是反复出现。传统错题本需要手动抄写题目、解析和知识点&#…...

WechatBakTool聊天记录管理工具全攻略

WechatBakTool聊天记录管理工具全攻略 【免费下载链接】WechatBakTool 基于C#的微信PC版聊天记录备份工具,提供图形界面,解密微信数据库并导出聊天记录。 项目地址: https://gitcode.com/gh_mirrors/we/WechatBakTool 一、问题诊断:聊…...

ScriptCat脚本猫完整指南:为什么它是浏览器脚本管理的终极选择

ScriptCat脚本猫完整指南:为什么它是浏览器脚本管理的终极选择 【免费下载链接】scriptcat ScriptCat, a browser extension that can execute userscript; 脚本猫,一个可以执行用户脚本的浏览器扩展 项目地址: https://gitcode.com/gh_mirrors/sc/scr…...

微软VibeVoice-TTS-Web-UI:长文本语音合成效果展示

微软VibeVoice-TTS-Web-UI:长文本语音合成效果展示 1. 突破性的语音合成体验 1.1 从机械朗读到情感表达 传统语音合成技术往往停留在"文字转声音"的基础层面,生成的语音缺乏情感起伏和自然韵律。VibeVoice-TTS-Web-UI通过创新的语言理解和声…...

AppleRa1n终极指南:5步轻松绕过iOS 15-16激活锁的完整教程

AppleRa1n终极指南:5步轻松绕过iOS 15-16激活锁的完整教程 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 还在为忘记Apple ID密码而无法使用自己的iPhone发愁吗?或者购买了二手…...