iOS开发Swift-枚举

news/2024/7/20 22:20:16 标签: swift, 开发语言, ios

枚举:一组相关的值定义了一个共同的类型,使你可以在代码中以类型安全的方式来使用这些值。

1.枚举语法

//枚举成员不会被赋予默认的整型值。成员本身就是完备的值,类型为CompassPoint。
enum CompassPoint {
    case north
    case south
    case east
    case west
}
//或者
enum Planet {
    case mercury, venus, earth
}

2.枚举的使用

var direction = CompassPoint.west
//direction: 已被推断类型,所以下次给他赋值的时候:
direction = .east

3.使用Switch语句匹配枚举值

direction = .south
switch direction {
    case .north:
        print("north")
    case .south:
        print("south")
    case .east:
        print("east")
    case .west:
        print("west")
}
//强调判断枚举的全部成员,如果没有判断全部成员则报错。所以在不需要判断全部成员时使用default。
switch direction {
    case .north:
        print("north")
    default:
        print("其他")
}

4.枚举成员的遍历

enum CompassPoint: CaseIterable {
//                         CaseIterable :  协议
    case coffee, tea, juice
}
let number = CompassPoint.allCases.count
//                                    allCases:包含所有枚举成员的集合方法
print("\(number)")

//或者
for com in CompassPoint.allCases{
    print(com)
}

5.关联值

enum Barcode {
    case upc(Int, Int, Int, Int)
    case qrCode(String)
}
var product = Barcode.upc(8, 85909, 51226, 3)
product = .qrCode("ABCDEFG")
switch product {
    case .upc(let n, let m, let p, let c):
        print("upc:\(n), \(m), \(p), \(c)")
    case .qrCode(let pc):
        print("QR code:\(pc).")
}
//简洁后:
switch product {
    case let .upc(n, m, p, c):
        print("upc:\(n), \(m), \(p), \(c)")
    case let .qrCode(pc):
        print("QR code:\(pc).")
}

6.原始值

原始值:定义枚举时被预先填充的值。

enum ASCIICharacter: Character {
    case tab = "\t"
    case lineFeed = "\h"
    case carriageReturn = "\r"
}

7.原始值的隐式赋值

(1)整数为原始值时,隐式赋值递增1。未设置原始值时,默认为0,之后递增1.

enum Planet: Int {
    case m = 1, n, r, j   //只为m赋原始值1
}
var x = Planet.n     //创建枚举变量x,   x的值为n
var y = x.rawValue    //通过rawValue属性来获取枚举的原始值
print(y)    //y的值为2

(2)字符串为原始值,隐式赋值为枚举成员的名称。

enum CompassPoint: String {
    case north, south, east, west   //他们的原始值为"north", "south", "east", "west"
}

8.使用原始值初始化枚举实例

let poss = Planet(rawValue: 7)
//poss:返回名称。如果没有则返回nil。     7:要查找的值。

9.递归枚举

enum Arith {
    case number(Int)
    indirect case add(Arith, Arith)   //indirect :可递归
    indirect case mul(Arith, Arith)
}
//简化
indirect enum Arith {    //indirect :所有成员可递归
    case number(Int)
    case add(Arith, Arith)
    case mul(Arith, Arith)
}
//使用
let five = Arith.number(5)
let four = Arith.number(4)
let sum = Arith.add(five, four)
let product = Arith.mul(sum, Arith.number(2))

http://www.niftyadmin.cn/n/4970502.html

相关文章

uniapp结合Canvas+renderjs根据经纬度绘制轨迹(二)

uniapp结合Canvasrenderjs根据经纬度绘制轨迹 文章目录 uniapp结合Canvasrenderjs根据经纬度绘制轨迹效果图templaterenderjsjs数据结构 ​ 根据官方建议要想在 app-vue 流畅使用 Canvas 动画,需要使用 renderjs 技术,把操作canvas的js逻辑放到视图层运…

-bash: tree: command not found 的解决方法

在学习git操作时发现使用命令tree .git时显示错误 在网上查阅资料后,发现可能是没有安装生成tree的应用,所以我们使用命令安装应用即可 sudo yum install -y tree像这样就是安装成功了 我们再来试试 问题解决了,成功显示出树形结构

Windows Server服务器安全加固基线配置

一、账户管理、认证授权 一、账户 1、管理缺省账户 安全基线项说明:对于管理员账号,要求更改缺省账户名称;禁用Guest(来宾)账户。 操作步骤:进入控制面板-->管理工具-->计算机管理,在系统工具-->本地用户和组…

算法 for GAMES

栈 #include <iostream> #include <stack>int main() {std::stack<int> intStack;// 压入元素到堆栈intStack.push(5);intStack.push(10);intStack.push(15);// 查看堆栈顶部元素std::cout << "Top element: " << intStack.top() <…

开源技术在教育中的应用

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

netty(二):NIO——处理可写事件

处理可写事件 什么情况下需要注册可写事件&#xff1f; 在服务端一次性无法把数据发送完的情况下&#xff0c;需要注册可写事件 服务端一次性是否能够把数据全部发送完成取决于服务端的缓冲区大小&#xff0c;该缓冲区不受程序控制 注册可写事件的步骤 判断ByteBuffer是否仍…

Module not found: Error: Can‘t resolve ‘less-loader‘解决办法

前言&#xff1a; 主要是在自我提升方面&#xff0c;感觉自己做后端还是需要继续努力&#xff0c;争取炮筒前后端&#xff0c;作为一个全栈软阿金开发人员&#xff0c;所以还是需要努力下&#xff0c;找个方面&#xff0c;目前是计划学会Vue&#xff0c;这样后端有java和pytho…

es的索引管理

概念 &#xff08;1&#xff09;集群&#xff08;Cluster&#xff09;&#xff1a; ES可以作为一个独立的单个搜索服务器。不过&#xff0c;为了处理大型数据集&#xff0c;实现容错和高可用性&#xff0c;ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。 &…