Dart 的枚举类型的高阶用法

打印 上一主题 下一主题

主题 870|帖子 870|积分 2610

一、枚举简介

枚举类型\color{#FF0000}{枚举类型}枚举类型 在 C++ 或者 VB 等一些计算机编程语言中是一种根本的数据类型而不是构造数据类型。而在 C 语言计算机编程语言中是一种 构造数据类型,而我们的 Dart 中的枚举属于这种。它用于声明一组命名的常数,当一个变量大概有几种取值时,可以将它定义为枚举类型。
   数据类型\color{#FF00FF}{数据类型}数据类型 :> 数据元( Data Element),也称为数据元素,是用一组属性描述其定义、标识、表示和答应值的数据单元,在一定语境下,通常用于构建一个语义正确、独立且无歧义的特定概念语义的信息单元。数据元可以理解为数据的根本单元,将多少具有相干性的数据元按一定的次序组成一个整体结构即为数据模子。
  二、Dart 的枚举

1. Dart 中使用 enum 关键字定义枚举类型,语法形式如下:

  1. enum class_name {member1,member2,member3,......
  2. }
复制代码
语法分析:
1.enum 是枚举引入的关键字。
2.class_name 是引入的枚举类名。
3.枚举类中的数据成员之间必须使用逗号分隔。
4.枚举中的成员都有一个与本身对应的索引值,索引值是从 0 开始的。
   注意:\color{#FF00FF}{注意:}注意:> 大概你看到有的博客或者讲师以及开发者说枚举末了一个成员不可以使用逗号,这是 不对的 。Dart 中的枚举末了一个成员 可以使用逗号或者不使用。官方的枚举末了一个成员背面都有逗号。
  2. Dart 最简单的枚举

  1. enum Festival {chunjie,yuanxiaojie,qingmingjie,duanwujie,zhongqiujie,chongyangjie,
  2. }
复制代码
枚举的根本使用如下:
1.获取枚举所有的成员, 使用 枚举类名.values, 如下所示:void main() {for (var element in Festival.values) {print(element);}} 上面输出:flutter: Festival.chunjieflutter: Festival.yuanxiaojieflutter: Festival.qingmingjieflutter: Festival.duanwujieflutter: Festival.zhongqiujieflutter: Festival.chongyangjie 2.获取成员的索引值,使用 成员.index, 如下所示:print(Festival.chunjie.index); 上面输出:flutter: 0 3.获取成员的名字,使用 成员.name , 如下所示:print(Festival.chunjie.name); 上面输出:flutter: chunjie 注意:\color{#FF00FF}{注意:}注意:Festival.chunjie.name 和 Festival.chunjie.toString() 的区别是前者输出是 chunjie 后者的输出是 Festival.chunjie。### 3. 枚举的扩展 ⭐️
枚举的扩展只能扩展方法不能扩展枚举成员\color{#FF0F0F}{只能扩展方法不能扩展枚举成员}只能扩展方法不能扩展枚举成员。比方: 给定索引值,获取对应的枚举类型。扩展如下:
  1. enum Festival {chunjie,yuanxiaojie,qingmingjie,duanwujie,zhongqiujie,chongyangjie,
  2. }
  3. // 扩展
  4. extension FestivalType on Festival {static Festival getTypeFormIndex(int index) {return Festival.values[index];}
  5. }
复制代码
扩展后的使用:
  1. void main() {final Festival type = FestivalType.getTypeFormIndex(2);print(type);
  2. }
复制代码
上面输出为:
  1. flutter: Festival.qingmingjie
复制代码
这常用于配景把一个属性差别类型定义为数字,然而项目里面是定义的枚举类型。在网络请求的数据处理时就需要一个映射对应。而对枚举扩展是最好的方法。
4.枚举可包罗多种数据类型 ⭐️ ⭐️

正常的枚举不能包罗其他数据类型,但是业务的扩展使得这样简单的枚举对开发带来不小的处理负担。有没有方法可以让枚举包罗其他的数据类型?答案是:有的!\color{#FF0F0F}{有没有方法可以让枚举包罗其他的数据类型?答案是:有的!}有没有方法可以让枚举包罗其他的数据类型?答案是:有的!。这就是下面要介绍的枚举以类型的形式定义。代码如下:
  1. enum WorkType {electrician(name: '电工', grade: 2),bricklayer(name: '瓦工', grade: 3),carpentry(name: '木工', grade: 1);const WorkType({required this.name, required this.grade});final String name;final int grade;
  2. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表