美文网首页
Dart 枚举原始值指定问题 及 原始值与枚举值转换问题

Dart 枚举原始值指定问题 及 原始值与枚举值转换问题

作者: HermitCarb | 来源:发表于2018-06-15 10:19 被阅读0次

问题由来

最近在看尝试Flutter,在开发时打算用枚举标示5个常用的按键KeyCode,因为就值关系特定几个KeyCode,所以打算仅设定5个枚举值,并且指定其原始值为其int值。但是我发现没办法指定这个int值。

探索

一、原始值指定

Dart语言的枚举不支持指定原始值,比如下面这种方式:

enum Color {
  Red = 3,   // Error
  Green = 6, // Error
}

这样一来,如果想使枚举值有一个比较大的原始值,就只能使用本文件中KeyCode这种方式。一般如下:

enum Color {
  Red,    // 0
  Green,  // 1
  Blue,   // 2
  ...     // 从3到32都需要填满
  Brown,  // 33
  ...     // 从34到43都需要填满
  Pink,   // 44
}

但是如果我只想用Brown到Pink颜色这几种颜色,并且其原始值在100以上呢?比如键盘KeyCode☹️就有好多。

二、原始值与枚举值转换

另外Dart语言枚举值到原始值的转换,直接取其index即可:

Color.Green.index == 1 // true

但却不支持从int原始值转换为枚举值,比如下面这种方式:

enum Color {
  Red,    // 0
  Green,  // 1
  Blue,   // 2
}
// 疯狂实验中
Color red = Color(0);        // Error
Color red = (Color)0;        // Error
Color red = new Color(0);    // Error
Color red = const Color(0);  // Error

但enum提供了一个values属性,比如上面枚举有:

Color.values = List<Color>[Color.Red, ... , Color.Blue]

Color.values是一个有序数组,其下标和该位置的Color枚举值的原始值相等。
所以,如果一个枚举满足:1. 从零开始,2. 各个值密集排布,(Dart肯定满足,因为没办法指定原始值),
则可以通过下面方式实现原始值到枚举值的转换:

Color red = Color.values[0];

结尾

参考:https://news.dartlang.org/2013/04/enum-proposal-for-dart.html

相关文章

  • Dart 枚举原始值指定问题 及 原始值与枚举值转换问题

    问题由来 最近在看尝试Flutter,在开发时打算用枚举标示5个常用的按键KeyCode,因为就值关系特定几个Ke...

  • 枚举

    枚举 本节内容包括: 枚举语法 匹配枚举值与switch语句 相关值 原始值 枚举语法 注意:不像 C 和 Obj...

  • Swift 语法(三)

    枚举 声明 获取 原始值 可以给枚举变量赋原始值 (Raw Value),例如: 此外,关于原始值,还有其他用法,...

  • swift中的枚举

    枚举有默认值 原始值不占用枚举内存 关联值

  • 枚举 可选项

    枚举 枚举的基本用法 关联值 如果取值只有几个固定的类型 可以考虑使用枚举 原始值 Character 是原始值的...

  • 枚举

    枚举概述 成员值: 一般只占用枚举内存最后一个字节 关联值:枚举内存最大占用者 原始值:若果枚举原始值类型是Int...

  • Swift与OC的语法简单对比(常用语法二)

    20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...

  • 03.Swift学习

    枚举 关联值 1.有时候会将枚举的成员值跟其他类型的关联存储在一起 原始值 隐式原始值 递归枚举 使用递归枚举的时...

  • Swift 2 学习笔记 10.枚举

    课程来自慕课网liuyubobobo老师 枚举 枚举基础 枚举之原始值 枚举之关联值 枚举递归

  • Swift中枚举的内存布局

    枚举 枚举的基本用法 关联值(Associated Values) 原始值(Raw Values) 枚举成员可以使...

网友评论

      本文标题:Dart 枚举原始值指定问题 及 原始值与枚举值转换问题

      本文链接:https://www.haomeiwen.com/subject/kuspeftx.html