swift枚举(一)
创始人
2024-02-05 21:01:15
0

OC中的枚举

   typedef NS_ENUM(NSUInteger, IFLEnum) {A, B, C}

A,B, C分别默认代表0, 1, 2

关键字enum 声明枚举

而swift中的枚举则更加灵活,并且不需要给枚举中的每一个成员都提供值

   enum IFLEnum {case onecase twocase three}let mEnum: IFLEnum = .twoprint(MemoryLayout.size)print(mEnum)

结果

1 - IFLEnum 结构所占用的内存大小为1字节

two - mEnum枚举变量的 打印结果

枚举成员提供原始类型

   enum IFLEnum: String {case onecase twocase three}let mEnum: IFLEnum = .twoprint(MemoryLayout.size)print(mEnum)print(mEnum.rawValue)

结果

1 - IFLEnum结构占据内存大小依然为1字节, 与原始类型无关

two

two - mEnum.rawValue 即原始值

   enum IFLEnum: String {case onecase two = "第2个"case three}let mEnum: IFLEnum = .twoprint(MemoryLayout.size)print(mEnum)print(mEnum.rawValue)

结果

1

two

第2个 - mEnum.rawValue 原始值变为 赋值的原始类型一个值 “第2个”

并且 原始类型修饰的枚举类型 不需要给每一个枚举成员都赋值

只有 原始类型修饰的枚举 才有 rawValue

隐式rawValue分配, 建立在Swift类型推断机制上

   enum IFLEnum: Int {case onecase twocase three = 10case four}print(MemoryLayout.size)let mEnum: IFLEnum = .onelet mEnum1: IFLEnum = .twolet mEnum2: IFLEnum = .threelet mEnum3: IFLEnum = .fourprint(mEnum.rawValue)print(mEnum1.rawValue)print(mEnum2.rawValue)print(mEnum3.rawValue)

结果

1

0

1

10

11

成员three 赋值为10,后面的成员 推断为 11,12…, 但不影响前面的成员,依然从0,1…

但需要注意的是 赋值成员的 值 不能与前面的成员相冲突,比如前面两个成员 原始值为 0,1,

three就不能赋值为 0, 1(前面的成员没做赋值操作的前提下)

关联值&模式匹配

   enum IFLEnum {case circle(Double)case case three = 10case four}print(MemoryLayout.size)let mEnum: IFLEnum = .circle(3.0)print(mEnum)

结果

25 - IFLEnum 结构所占内存 变为了25字节,暂且不表,后面会解释

circle(3.0)

   enum IFLEnum {case circle(Double)case rectangle(Int, Int)case triangle(Int, Int, Int)case none}print(MemoryLayout.size)let mEnum: IFLEnum = .circle(3.0)let mEnum1: IFLEnum = .triangle(3, 4, 5)print(mEnum)print(mEnum1)switch mEnum {case .circle(let radius):print("圆半径: \(radius)")case .rectangle(let length, let width):print("长方形 长:\(length), 宽:\(width)")case .triangle(let width1, let width2, let width3):print("三角形 第一条边: \(width1), 第二条边: \(width2), 第三条边: \(width3)")default:print("nothing")}switch mEnum1 {case .circle(let radius):print("圆半径: \(radius)")case .rectangle(let length, let width):print("长方形 长:\(length), 宽:\(width)")case .triangle(let width1, let width2, let width3):print("三角形 第一条边: \(width1), 第二条边: \(width2), 第三条边: \(width3)")default:print("nothing")}

结果

25

circle(3.0)

triangle(3, 4, 5)

圆半径: 3.0

三角形 第一条边: 3, 第二条边: 4, 第三条边: 5

模式匹配另一种写法

	switch mEnum1 {case let .circle(radius):print("圆半径: \(radius)")case let .rectangle(length, width):print("长方形 长:\(length), 宽:\(width)")case let .triangle(width1, width2, width3):print("三角形 第一条边: \(width1), 第二条边: \(width2), 第三条边: \(width3)")default:print("nothing")}

枚举结构的大小

区分几种不同的情况

No-payload enums

	enum Week {case Mondaycase Tuesdaycase Wednesdaycase Thursdaycase Fridaycase Saturdaycase Sunday}print(MemoryLayout.size)print(MemoryLayout.stride)

结果

1

1

在swift中进行枚举内存布局的时候,一直都是尝试使用最少的空间来存储

对于当前case的数量来说,UInt8能够标识256种case

也就意味着如果一个默认枚举类型没有关联值的case 少于256,都是1字节大小

在这里插入图片描述

控制台打印可以看到

3个枚举变量 mWeek1, mWeek2, mWeek3 存储的内容分别是 01 04 06, 与上所说布局一致

相关内容

热门资讯

签名设计免费版 签名设计免费版大全  伤害你最深的人,往往是那些声称永远不会伤害你的人。  1、当我专一的时候,你执...
比较吸引人的微信名字 比较吸引人的微信名字  微信(WeChat)是腾讯公司于2011年1月21日推出的一个为智能终端提供...
微信个人签名经典语句   最可怕的事情莫过于,推你下地狱的人,曾经带你上过天堂,下面由unjs小编为大家搜集的微信个人签名...
一对姐妹的个性签名 一对姐妹的个性签名  1、正因有了m我才会那么那么那么的牵挂。——正因有了你我才会那么那么那么的疯狂...
简短的励志座右铭 简短的励志座右铭58句  私底下的每一分的努力,都会在公众眼前表示出来。以下是小编收集整理的励志座右...
繁体字签名 繁体字签名15篇繁体字签名1  1、習慣會漸漸養成,也可以漸漸被改變。  2、我拼命地瞪著眼睛可眼淚...
朱清时:“南科大妥协了?这是... 朱清时:“南科大妥协了?这是误解!”  简介  朱清时  男,化学家,教授,博士生导师,中国科学院院...
微信名字好听的四个字 微信名字好听的四个字  一、什么是网名  网名指在网上使用的名字。由于网络是一个虚拟的世界,为了避免...
小猫起名字大全300个 小猫起名字大全300个  动物起名技巧  1、根据电视剧起名。现在电脑行业很发达,虚拟动漫行业发展的...
个性的微信名 个性的微信名  当今社会,人们对网络一网情深。网络不仅影响着人们生活的方方面面,同时也给网民们自创网...
微信网名女生可爱 微信网名女生可爱  微信网名女生可爱(精选260个)  很多女生们都自称为萌妹纸,那么作为萌妹纸的你...
爱情个性签名 爱情个性签名(精选50句)  随着社交网络的发展和智能手机的更新,越来越多人钟情于在社交平台上不定时...
非常精辟的40个哲理签名 非常精辟的40个哲理签名  1、青春是打开合不上的书,人生是踏上了回不了头的路。  2、一个人越炫耀...
长安 长安世界历史名城长安(世界历史名城)长安是西安在汉唐时期的名称,是世界历史及中国历史上一座著名都城。...
炫酷QQ个性签名 炫酷QQ个性签名  引导语:多年的今天,不知道你还记得我否,我与你一起征战沙场,与你共进退。下面由y...
可爱情侣网名 可爱情侣网名  随着时代的飞速发展,越来越多新奇的话语、话术应运而生,带给人们欢声笑语,让人们感受到...
鹿晗的个性签名 关于鹿晗的个性签名集锦  1、一鹿有你,我亦足以!  2、鹿晗,这生只你一人。  3、鹿晗,我会爱你...
2022微信最火网名 2022微信最火网名  取名原则  符合形象定位要求  网名是你自己形象综合的,直接传达,自己不喜欢...
春分的寄语 关于春分的寄语(6篇)  在日常学习、工作和生活中,大家都有写寄语的经历,对寄语很是熟悉吧,寄语的文...
佛系女孩座右铭 佛系女孩座右铭  一、做人要能随遇而安随缘生活随心自在随喜而做;处事要从澹处着眼疑处用心无处下手拙处...