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

Swift枚举相关值

例如,假设一个库存跟踪系统需要利用两种不同类型的条形码来跟踪商品。有些商品上标有 UPC-A 格式的一维码,它使用数字 0 到 9。每一个条形码都有一个代表“数字系统”的数字,该数字后接 10 个代表“标识符”的数字。最后一个数字是“检查”位,用来验证代码是否被正确扫描:

其他商品上标有 QR 码格式的二维码,它可以使用任何 ISO8859-1 字符,并且可以编码一个最多拥有 2,953 字符的字符串:

对于库存跟踪系统来说,能够把 UPC-A 码作为三个整型值的元组,和把 QR 码作为一个任何长度的字符串存储起来是方便的。

在 Swift 中,用来定义两种商品条码的枚举是这样子的:

enumBarcode{caseUPCA(Int,Int,Int)caseQRCode(String)}

Swift

以上代码可以这么理解:

“定义一个名为Barcode的枚举类型,它可以是UPCA的一个相关值(Int,Int,Int),或者QRCode的一个字符串类型(String)相关值。”

这个定义不提供任何Int或String的实际值,它只是定义了,当Barcode常量和变量等于Barcode.UPCA或Barcode.QRCode时,相关值的类型。

然后可以使用任何一种条码类型创建新的条码,如:

varproductBarcode=Barcode.UPCA(8,85909_51226,3)

Swift

以上例子创建了一个名为productBarcode的新变量,并且赋给它一个Barcode.UPCA的相关元组值(8, 8590951226, 3)。提供的“标识符”值在整数字中有一个下划线,使其便于阅读条形码。

同一个商品可以被分配给一个不同类型的条形码,如:

productBarcode=.QRCode("ABCDEFGHIJKLMNOP")

Swift

这时,原始的Barcode.UPCA和其整数值被新的Barcode.QRCode和其字符串值所替代。条形码的常量和变量可以存储一个.UPCA或者一个.QRCode(连同它的相关值),但是在任何指定时间只能存储其中之一。

像以前那样,不同的条形码类型可以使用一个 switch 语句来检查,然而这次相关值可以被提取作为 switch 语句的一部分。你可以在switch的 case 分支代码中提取每个相关值作为一个常量(用let前缀)或者作为一个变量(用var前缀)来使用:

switch productBarcode

{

case.UPCA(let numberSystem,let identifier,let check):

print("UPC-A with value of\(numberSystem),\(identifier),\(check).")

case.QRCode(let productCode):

println("QR code with value of\(productCode).")

}// 输出 "QR code with value of ABCDEFGHIJKLMNOP.”

Swift

如果一个枚举成员的所有相关值被提取为常量,或者它们全部被提取为变量,为了简洁,你可以只放置一个var或者let标注在成员名称前:

switch productBarcode

{

case let .UPCA(numberSystem,identifier,check):

print("UPC-A with value of\(numberSystem),\(identifier),\(check).")

case let .QRCode(productCode):

print("QR code with value of\(productCode).")

}// 输出 "QR code with value of ABCDEFGHIJKLMNOP."

相关文章:

  • 去重排序
  • .NET Core中的去虚
  • php获取数组长度的方法
  • 恢复误删除的ESXi服务器存储VMFS卷
  • .NET 反射的使用
  • vim/vi卡死
  • ECSHOP修改后台地址
  • WebCast听课录(5)
  • 数字音乐维权联盟首次出招 QQ音乐起诉酷我索赔千万
  • Pure-ftpd无法连接到服务器 425错误
  • 华为交换机ntp设置
  • 同源策略
  • 硬盘驱动器
  • Powershell 修改AD用户属性
  • Unicode和多字节的相互转换
  • canvas 绘制双线技巧
  • JavaScript 基础知识 - 入门篇(一)
  • leetcode388. Longest Absolute File Path
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • Windows Containers 大冒险: 容器网络
  • 初识 beanstalkd
  • 初识 webpack
  • 机器学习学习笔记一
  • 来,膜拜下android roadmap,强大的执行力
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 无服务器化是企业 IT 架构的未来吗?
  • 一些关于Rust在2019年的思考
  • ​flutter 代码混淆
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #define用法
  • #if #elif #endif
  • #WEB前端(HTML属性)
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (论文阅读11/100)Fast R-CNN
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (十)c52学习之旅-定时器实验
  • (一)Neo4j下载安装以及初次使用
  • (一)基于IDEA的JAVA基础10
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .net core 6 redis操作类
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @Query中countQuery的介绍
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [Android] 修改设备访问权限
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析