首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

swift 枚举(枚举关联枚举原始、递归枚举等)

Swift 枚举可以用来存储任意类型的关联 声明存储不同类型关联枚举成员(这个定义不提供任何Int或String类型的关联) 一个成员是(Int,Int,Int)类型关联的num 一个成员是...原始是在定义枚举时被预先填充的。对于一个特定的枚举成员,它的原始始终不变。关联是创建一个基于枚举成员的常量或变量时才设置的枚举成员的关联可以变化。...原始的隐式赋值 当使用整数作为枚举成员的原始时,隐式赋值的依次递增1 enum Season:Int { case spring = 1 case summer case...autumn case winter } 当使用字符串作为枚举类型的原始时,每个枚举成员的隐式原始为该枚举成员的名称 enum Season:String { case spring...) 使用原始初始化枚举实例 可以通过rawValue初始化一个枚举成员,返回则是枚举成员或nil 可以通过这个来判断这个新枚举成员是否在枚举中 enum Season:Int { case

17110
您找到你想要的搜索结果了吗?
是的
没有找到

EasyC++14,枚举的使用

这是EasyC++系列的第14篇,咱们来聊聊C++当中的枚举枚举 简介 C++当中提供了枚举操作,我们可以使用enum关键字创建枚举类型。...使用 我们定义了枚举类型之后,可以当做正常类型来进行声明: color a; 由于color是一个枚举类型,所以当我们赋值的时候,只能赋值列举出来的类型,如果附上其他的可能会出问题。...枚举的取值范围 前文说了,只有声明中的枚举是有效的,然而由于C++允许使用强制转换转换成枚举,所以理论上枚举取值范围内的都可以被转换成枚举,虽然这些在逻辑上不一定有意义。...对于枚举变量来说,它的范围并不是固定的,而是根据定义情况波动的。C++会根据枚举声明的情况计算上限和下限,只能允许在范围内的整型强制转化为枚举。...所以这个枚举的上限就是31,对于下限也会采用类似的计算,如果定义的最小大于等于0,那么它的下限就是0,否则采取同样的算法,只不过加上负号。 之所以会如此复杂,也是为了尽可能地节省内存空间。

55110

枚举很好用啊,为啥阿里不建议返回枚举

从手册可以看出,定义和使用枚举,阿里开发手册都是支持的,但是为啥,返回就要反对了呢? 看看作者孤尽是怎么说的 由于升级原因,导致双方的枚举类不尽相同,在接口解析,类反序列化时出现异常。...可是为什么在返回和参数进行了区分呢,如果不兼容,那么两个都有问题,怎么允许参数可以有枚举。当时的考虑,如果参数也不能用,那么枚举几乎无用武之地了。...但如果是接口返回,就比较恶心了,因为解析回来的这个枚举,可能本地还没有,这时就会抛出序列化异常。...返回:Weather guess(参数),那么对方运算后,返回一个SNOWY,本地枚举里没有这个,傻眼了。 不过,另一位网友Brian的回答也很通俗易懂 枚举,就是把已知的全部罗列出来。...库版本升级后我支持了更多,你不知道情况下自然不会使用,反正我不支持的参数你不可能传递给我,所以作为输入,枚举简直就是安全保障。但作为返回,情况就反过来了。

2K20

枚举很好用啊,为啥阿里不建议返回枚举

我们先来看看阿里开发手册关于枚举使用的建议 ? 从手册可以看出,定义和使用枚举,阿里开发手册都是支持的,但是为啥,返回就要反对了呢?...可是为什么在返回和参数进行了区分呢,如果不兼容,那么两个都有问题,怎么允许参数可以有枚举。当时的考虑,如果参数也不能用,那么枚举几乎无用武之地了。...但如果是接口返回,就比较恶心了,因为解析回来的这个枚举,可能本地还没有,这时就会抛出序列化异常。...返回:Weather guess(参数),那么对方运算后,返回一个SNOWY,本地枚举里没有这个,傻眼了。 不过,另一位网友Brian的回答也很通俗易懂 枚举,就是把已知的全部罗列出来。...库版本升级后我支持了更多,你不知道情况下自然不会使用,反正我不支持的参数你不可能传递给我,所以作为输入,枚举简直就是安全保障。但作为返回,情况就反过来了。

1.8K20

CA1008:枚举应具有零

规则 ID CA1008 类别 设计 修复是中断修复还是非中断修复 非中断 - 如果系统提示你向无标志枚举添加 None 。 中断 - 如果系统提示你重命名或删除任何枚举。...或者,枚举定义多个零成员。 默认情况下,此规则仅查看外部可见的枚举,但这是可配置的。 规则说明 像其他类型一样,未初始化枚举的默认为零。...无标志特性的枚举应定义为零的成员,这样默认即为该枚举的有效。 如果可行,请将成员命名为“None”。 否则,将零赋给最常使用的成员。...默认情况下,如果未在声明中设置第一个枚举成员的,则其为零。 如果应用了 FlagsAttribute 的枚举定义为零成员,则该成员的名称应为“None”,以指示枚举中尚未设置。...”枚举 CA1712:不要将类型名用作枚举的前缀 CA1028:枚举存储应为 Int32 CA1027:用 FlagsAttribute 标记枚举 另请参阅 System.Enum

47220

JS中愉快地使用枚举

背景 在JS中并没有原生枚举的实现,可以通过下面几种方法来模拟类似的操作。...使用变量储存枚举 这次进阶了一下,虽然代码啰嗦了,但是犯错概率会大大降低: const Days = Object.freeze({ Mon: 'Mon', Tue: 'Tue',...console.log(isWeekend(Days.Sun)) // true console.log(isWeekend(Days.Mon)) // false 使用Symbol类型 虽然说用变量把枚举储存起来了...JS定义枚举集合时的优化 可以尝试下列几种方法,只需要写出来枚举的名字,通过几个数组的API进行赋值操作。 但是由于是动态执行的,效率相对来说会降低,不过这通常是不足一提的。...数字类型 用index当成枚举: const Days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat'].reduce((pre, cur, index

3K10

CA1700:不要用“Reserved”命名枚举

规则 ID CA1700 类别 命名 修复是中断修复还是非中断修复 重大 原因 枚举成员的名称包含单词“reserved”。...在将来的版本中,向枚举添加新成员,而不是使用预留成员。 在大多数情况下,只要添加新成员不会导致原始成员的发生变化,添加新成员就不是一项中断性变更。...在少数情况下,添加成员是一项中断性变更,即使原始成员保留其原始也是如此。...主要问题是,如果不中断对包含整个成员列表的返回使用 switch(在 Visual Basic 中为 Select)语句并且在默认情况下引发异常的调用方,则不能从现有代码路径返回新成员。...CA1712:不要将类型名用作枚举的前缀 CA1028:枚举存储应为 Int32 CA1008:枚举应具有零 CA1027:用 FlagsAttribute 标记枚举

46000

Go 100 mistakes之如何正确设置枚举中的零

我们知道,在Go中会给定义的变量一个默认,比如int类型的变量默认是0。我们在定义枚举时,往往也会从0开始定义。本文就解释如何区分是显示指定了变量的0还是因为确实字段而得到的默认。...我们创建Weekday类型的枚举的方法是比较合适的。...这个问题和我们定义Weekday枚举的方式有关。实际上,Unknown是枚举的最后一个。因此,它的应该等于7....为了解决该问题,处理一个unknown的枚举的最好的实践方法是将它设置成0(int类型的零)。...根据经验,枚举的未知应该设置为枚举类型的零。这样,我们就可以区分出显示和缺失值了。

3.7K10

Go中枚举有效性检查最佳实践

因翻译水平有限,难免存在翻译准确性问题,敬请谅解 本文介绍关于检查枚举有效性的最佳实践,即判断是否在定义的常量范围内。 由于Go中的枚举是使用类型别名构造的,因此我们无法实现对枚举的限制。...即使新的Weekday类型被加入,只要我们保持end常量是在枚举列表的最后一行,那么isValid方法将始终告诉我们提供的是否是被视为一个有效的: fmt.Println(Monday.isValid...true fmt.Println(Weekday(2).isValid()) //true fmt.Println(Weekday(100).isValid()) //false 总之,如果我们必须处理枚举...: 我们应该总是定义一个特定的类型 如果我们不关心枚举,我们可以使用常量生成器iota来简化定义。...否则,例如“该常量必须等于3”,那么我们不应该使用iota来处理而是指定明确的。 unkown应该始终分配给零 要检查枚举的有效性,我们可以通过在最后一行定义一个私有常量来实现。

1.3K20
领券