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
最近在做一个学校的系统,其中用到一些枚举,可是在显示下拉列表时要绑定枚举的描述及其枚举值时就只一个一个的默认设死,这样不灵活。有没有其快捷方法?...搜了下百度很多相关资料有了些许眉目,代码如下 1.首先定义枚举,这里要做显示学生状态的列表,如下所示 1 /// 2 /// 学生状态 3 /// 4...2, 23 24 /// 25 /// 休学 26 /// 27 [Description("休学")] 28 Suspend = 3 29 } 2.循环取枚举属性...,Enum.GetNames这个方法是获取枚举定义的属性(如Study),Enum.GetValues这个方法是获取枚举定义的属性值(如0) 1 foreach (var em in Enum.GetNames
import java.util.LinkedHashMap; /** * 是否 * 1-是 0-否 * 表.字段 * table.c...
假设定义了一个这样的枚举类型: enum MyEnum { aa = 1, bb = 2 } 1、字符串转换为枚举: string strA...= "aa"; MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), strA); 上面的方法是区分大小写的,也就是说,如果strA的值为“AA...aa"; MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), strA, true); 当最后一个参数设置为true时忽略大小写 2、整数转换为枚举值...int iA = 2; MyEnum myEnum = (MyEnum)iA; 这种方法可以将一个整数转换为枚举类型;如果iA不是一个有效的枚举值,则转换失败。
枚举值特别多的时候,想每一个枚举值都具体注释提示的话,就只能在每个枚举上一行加上/// ···或/** ··· */,但是会让代码显得不整齐(可能是我强迫症?)...,如果需要给每个枚举值增加一个简短的注释,并且在使用的时候有注释提示可以这样写。 - 带提示代码后单行注释 ://!< ··· 或多行注释: /**< ··· */和 /*!...< ··· */ /// 测试枚举 typedef NS_ENUM(NSUInteger, ZYTestType) { ZYTestTypeA, //!...< 类型C */ }; 枚举注释 这种注释方法,同样适合类的属性注释或者结构体属性注释。
有时我们需要将枚举定义为1,2,4,8.......的值,这样当传入一个3,那么就是表示1,2的组合,如果传入7,那就表示1,2,4的组合。要实现这种功能我们需要用到FlagsAttribute。...[Flags] public enum FormType { Reimburse=, Payment=, Precharge=, PO= } 2.组合枚举值的判断... { Console.WriteLine("PO"); } Console.WriteLine("End"); } 3.生成组合枚举
这是EasyC++系列的第14篇,咱们来聊聊C++当中的枚举值。 枚举 简介 C++当中提供了枚举操作,我们可以使用enum关键字创建枚举类型。...使用 我们定义了枚举类型之后,可以当做正常类型来进行声明: color a; 由于color是一个枚举类型,所以当我们赋值的时候,只能赋值列举出来的类型,如果附上其他的值可能会出问题。...枚举值的取值范围 前文说了,只有声明中的枚举值是有效的,然而由于C++允许使用强制转换转换成枚举值,所以理论上枚举值取值范围内的值都可以被转换成枚举值,虽然这些值在逻辑上不一定有意义。...对于枚举变量来说,它的范围并不是固定的,而是根据定义情况波动的。C++会根据枚举值声明的情况计算上限和下限,只能允许在范围内的整型值强制转化为枚举值。...所以这个枚举值的上限就是31,对于下限也会采用类似的计算,如果定义的最小值大于等于0,那么它的下限就是0,否则采取同样的算法,只不过加上负号。 之所以会如此复杂,也是为了尽可能地节省内存空间。
(string[] args) { TestEnum testEnum = TestEnum.one; // 获取枚举的描述...string thisValue = FetchDescription(testEnum); //获取枚举的值
从手册可以看出,定义和使用枚举,阿里开发手册都是支持的,但是为啥,返回值就要反对了呢? 看看作者孤尽是怎么说的 由于升级原因,导致双方的枚举类不尽相同,在接口解析,类反序列化时出现异常。...可是为什么在返回值和参数进行了区分呢,如果不兼容,那么两个都有问题,怎么允许参数可以有枚举。当时的考虑,如果参数也不能用,那么枚举几乎无用武之地了。...但如果是接口返回,就比较恶心了,因为解析回来的这个枚举值,可能本地还没有,这时就会抛出序列化异常。...返回值:Weather guess(参数),那么对方运算后,返回一个SNOWY,本地枚举里没有这个值,傻眼了。 不过,另一位网友Brian的回答也很通俗易懂 枚举,就是把已知的全部罗列出来。...库版本升级后我支持了更多,你不知道情况下自然不会使用,反正我不支持的参数你不可能传递给我,所以作为输入,枚举简直就是安全保障。但作为返回值,情况就反过来了。
我们先来看看阿里开发手册关于枚举使用的建议 ? 从手册可以看出,定义和使用枚举,阿里开发手册都是支持的,但是为啥,返回值就要反对了呢?...可是为什么在返回值和参数进行了区分呢,如果不兼容,那么两个都有问题,怎么允许参数可以有枚举。当时的考虑,如果参数也不能用,那么枚举几乎无用武之地了。...但如果是接口返回,就比较恶心了,因为解析回来的这个枚举值,可能本地还没有,这时就会抛出序列化异常。...返回值:Weather guess(参数),那么对方运算后,返回一个SNOWY,本地枚举里没有这个值,傻眼了。 不过,另一位网友Brian的回答也很通俗易懂 枚举,就是把已知的全部罗列出来。...库版本升级后我支持了更多,你不知道情况下自然不会使用,反正我不支持的参数你不可能传递给我,所以作为输入,枚举简直就是安全保障。但作为返回值,情况就反过来了。
WINTER } 就定义了一个季节枚举类型。...也就是说,使用name()方法和valueOf(String)方法能够在枚举类型对象和字符串之间方便得转换。...当然,假设valueOf(String)方法的參数不是该枚举类型合法的字符串,则会抛出IllegalArgumentException异常。...对于这个问题,实际上能够利用枚举类型的values()方法间接的做到。values()方法返回一个枚举对象数组,比方本例就是Season[],数组元素依照序数排列。...在自己定义的枚举类型中,我们仅仅要定义自己的valueOf(int)方法,并返回该数组下标对象的对象就能够了。
值 规则 ID CA1069 类别 设计 修复是中断修复还是非中断修复 重大 原因 枚举具有多个成员,这些成员显式分配有相同常数值。...规则说明 每个枚举成员都应具有唯一的常数值,或者为其显式分配枚举中的前一个成员以指示共享值的明确意图。...复制粘贴错误:用户复制了一个现有成员定义,然后重命名了该成员,但忘记更改值。 合并多个分支中的解决方案:在不同分支中添加了具有不同名称但有相同值的新成员。...如何解决冲突 若要解决冲突,请分配新的唯一常数值,或分配枚举中的前一个成员以指示共享同一值的明确意图。
值 规则 ID CA1008 类别 设计 修复是中断修复还是非中断修复 非中断 - 如果系统提示你向无标志枚举添加 None 值。 中断 - 如果系统提示你重命名或删除任何枚举值。...或者,枚举定义多个零值成员。 默认情况下,此规则仅查看外部可见的枚举,但这是可配置的。 规则说明 像其他值类型一样,未初始化枚举的默认值为零。...无标志特性的枚举应定义值为零的成员,这样默认值即为该枚举的有效值。 如果可行,请将成员命名为“None”。 否则,将零赋给最常使用的成员。...默认情况下,如果未在声明中设置第一个枚举成员的值,则其值为零。 如果应用了 FlagsAttribute 的枚举定义值为零成员,则该成员的名称应为“None”,以指示枚举中尚未设置值。...”枚举值 CA1712:不要将类型名用作枚举值的前缀 CA1028:枚举存储应为 Int32 CA1027:用 FlagsAttribute 标记枚举 另请参阅 System.Enum
背景 在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
值 规则 ID CA1700 类别 命名 修复是中断修复还是非中断修复 重大 原因 枚举成员的名称包含单词“reserved”。...在将来的版本中,向枚举添加新成员,而不是使用预留成员。 在大多数情况下,只要添加新成员不会导致原始成员的值发生变化,添加新成员就不是一项中断性变更。...在少数情况下,添加成员是一项中断性变更,即使原始成员保留其原始值也是如此。...主要问题是,如果不中断对包含整个成员列表的返回值使用 switch(在 Visual Basic 中为 Select)语句并且在默认情况下引发异常的调用方,则不能从现有代码路径返回新成员。...CA1712:不要将类型名用作枚举值的前缀 CA1028:枚举存储应为 Int32 CA1008:枚举应具有零值 CA1027:用 FlagsAttribute 标记枚举
我们知道,在Go中会给定义的变量一个默认值,比如int类型的变量默认值是0。我们在定义枚举值时,往往也会从0值开始定义。本文就解释如何区分是显示指定了变量的0值还是因为确实字段而得到的默认值。...我们创建Weekday类型的枚举值的方法是比较合适的。...这个问题和我们定义Weekday枚举的方式有关。实际上,Unknown是枚举值的最后一个值。因此,它的值应该等于7....为了解决该问题,处理一个unknown的枚举值的最好的实践方法是将它设置成0(int类型的零值)。...根据经验,枚举的未知值应该设置为枚举类型的零值。这样,我们就可以区分出显示值和缺失值了。
/** * 类型,状态,各个枚举类型的javascript对象 */ @RequestMapping(value = "/common/enums") public void enumJS() throws
因翻译水平有限,难免存在翻译准确性问题,敬请谅解 本文介绍关于检查枚举值有效性的最佳实践,即判断值是否在定义的常量范围内。 由于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应该始终分配给零值 要检查枚举值的有效性,我们可以通过在最后一行定义一个私有常量来实现。
Javascript1.8.5开始可以使用Object.freeze来冻结对象实现一个类似”枚举”类型。...Object.freeze(DaysEnum) 这就是js中的”枚举”!是不是很简单? 不过现在是2019年了,我们还可以使用const来定义对象。
领取专属 10元无门槛券
手把手带您无忧上云