Dart 的枚举类型的高阶用法

这篇具有很好参考价值的文章主要介绍了Dart 的枚举类型的高阶用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、枚举简介

枚举类型\color{#FF0000}{枚举类型}枚举类型 在 C++ 或者 VB 等一些计算机编程语言中是一种基本的数据类型而不是构造数据类型。而在 C 语言计算机编程语言中是一种 构造数据类型,而我们的 Dart 中的枚举属于这种。它用于声明一组命名的常数,当一个变量可能有几种取值时,可以将它定义为枚举类型。

数据类型\color{#FF00FF}{数据类型}数据类型 :> 数据元( Data Element),也称为数据元素,是用一组属性描述其定义、标识、表示和允许值的数据单元,在一定语境下,通常用于构建一个语义正确、独立且无歧义的特定概念语义的信息单元。数据元可以理解为数据的基本单元,将若干具有相关性的数据元按一定的次序组成一个整体结构即为数据模型。

二、Dart 的枚举

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

enum class_name {member1,member2,member3,......
} 

语法分析:

1.enum 是枚举引入的关键字。
2.class_name 是引入的枚举类名。
3.枚举类中的数据成员之间必须使用逗号分隔。
4.枚举中的成员都有一个与自己对应的索引值,索引值是从 0 开始的。

注意:\color{#FF00FF}{注意:}注意:> 可能你看到有的博客或者讲师以及开发者说枚举最后一个成员不可以使用逗号,这是 不对的 。Dart 中的枚举最后一个成员 可以使用逗号或者不使用。官方的枚举最后一个成员后面都有逗号。

2. Dart 最简单的枚举

enum Festival {chunjie,yuanxiaojie,qingmingjie,duanwujie,zhongqiujie,chongyangjie,
} 

枚举的基本使用如下:

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.nameFestival.chunjie.toString() 的区别是前者输出是 chunjie 后者的输出是 Festival.chunjie。### 3. 枚举的扩展 ⭐️

枚举的扩展只能扩展方法不能扩展枚举成员\color{#FF0F0F}{只能扩展方法不能扩展枚举成员}只能扩展方法不能扩展枚举成员。例如: 给定索引值,获取对应的枚举类型。扩展如下:

enum Festival {chunjie,yuanxiaojie,qingmingjie,duanwujie,zhongqiujie,chongyangjie,
}
// 扩展
extension FestivalType on Festival {static Festival getTypeFormIndex(int index) {return Festival.values[index];}
} 

扩展后的使用:

void main() {final Festival type = FestivalType.getTypeFormIndex(2);print(type);
} 

上面输出为:

flutter: Festival.qingmingjie 

这常用于后台把一个属性不同类型定义为数字,然而项目里面是定义的枚举类型。在网络请求的数据处理时就需要一个映射对应。而对枚举扩展是最好的方法。

4.枚举可包含多种数据类型 ⭐️ ⭐️

正常的枚举不能包含其他数据类型,但是业务的扩展使得这样简单的枚举对开发带来不小的处理负担。有没有方法可以让枚举包含其他的数据类型?答案是:有的!\color{#FF0F0F}{有没有方法可以让枚举包含其他的数据类型?答案是:有的!}有没有方法可以让枚举包含其他的数据类型?答案是:有的!。这就是下面要介绍的枚举以类型的形式定义。代码如下:

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;
} 

📢注意:\color{#ff0f0f}{📢 注意:}📢注意:

1.定义的属性是不可变的,需要使用 final 关键字修饰。
2.构造方法前的 const 关键字不可缺少。
3.各个枚举成员之间使用逗号 ,分隔,最后一个成员使用 分号 ;结尾。

该枚举的使用:

void main() {final String name = WorkType.bricklayer.name;print(name);final int grade = WorkType.carpentry.grade;print(grade);
} 

上面输出为:

flutter: 瓦工
flutter: 1 

三、Dart 的枚举扩展介绍

1. 为什么所有的枚举成员都有个数字标识符?

答: 这是因为使用 enum关键字引入了 Enum 类。定义的枚举实现了 Enum 类的index属性。代码如下:

@Since("2.14")
abstract class Enum {int get index;String get _name;......
} 

2. 为什么所有枚举成员可以获取名字?

答: 因为类 Enum 进行扩展了 name 方法。代码如下:

@Since("2.15")
extension EnumName on Enum {
 String get name => _name;
} 

3. Enum 类还提供了两个枚举的比较的方法

  • static int compareByIndex<T extends Enum>(T value1, T value2) => value1.index - value2.index;通过枚举成员的索引值比较大小。代码如下:final int compare =Enum.compareByIndex(Festival.chunjie, Festival.yuanxiaojie);print(compare);final int compare1 = Enum.compareByIndex(Festival.chunjie, Festival.chunjie);print(compare1);final int compare2 =Enum.compareByIndex(Festival.yuanxiaojie, Festival.chunjie);print(compare2); 上面代码输出为:flutter: -1flutter: 0flutter: 1 上述代码总结:1.如果 Enum.compareByIndex 的结果小于零,则 value1的枚举成员排序靠前; value2枚举成员排序靠后。2.如果 Enum.compareByIndex 的结果等于零,则 value1value2枚举成员是同一个。3.如果 Enum.compareByIndex 的结果大于零,则 value1的枚举成员排序靠后; value2枚举成员排序靠前。
  • static int compareByName<T extends Enum>(T value1, T value2) => value1.name.compareTo(value2.name);比较枚举成员名字的大小。(个人觉得很鸡肋,没有多大实际用途\color{#00ff00}{个人觉得很鸡肋,没有多大实际用途}个人觉得很鸡肋,没有多大实际用途)### 4. 对枚举类型的集合进行扩展

0.扩展代码@Since("2.15")extension EnumByName<T extends Enum> on Iterable<T> {// 通过字符串获取枚举T byName(String name) {for (var value in this) {if (value._name == name) return value;}throw ArgumentError.value(name, "name", "No enum value with that name");}Map<String, T> asNameMap() =><String, T>{for (var value in this) value._name: value};} 1.通过名字获取枚举类型。void main() {final Festival festival = Festival.values.byName('chunjie');print(festival);} 上面代码输出:flutter: Festival.chunjie 2.将集合类型的枚举,按名字转化为字典集合void main() {final Map<String, Festival> fMap = Festival.values.asNameMap();print(fMap);} 上面代码输出:flutter: {chunjie: Festival.chunjie, yuanxiaojie: Festival.yuanxiaojie, qingmingjie: Festival.qingmingjie, duanwujie: Festival.duanwujie, zhongqiujie: Festival.zhongqiujie, chongyangjie: Festival.chongyangjie}

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。
dart enum,flutter,android,ios
dart enum,flutter,android,ios
dart enum,flutter,android,ios
dart enum,flutter,android,ios
pic_center" style=“margin: auto” />
dart enum,flutter,android,ios

有需要的小伙伴,可以点击下方卡片领取,无偿分享文章来源地址https://www.toymoban.com/news/detail-588518.html

到了这里,关于Dart 的枚举类型的高阶用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Flutter问题记录】Android Studio不显示(右上角main.dart左边)设备栏

    记录一下今天遇到的情况: 用android studio打开项目,我检查了,已经配置了flutter sdk和android sdk,但是右上角main.dart左边的设备栏就是不显示。 解决方法: 恢复如初:

    2024年02月16日
    浏览(50)
  • 【Flutter 面试题】Dart是什么?Dart和Flutter有什么关系?

    【Flutter 面试题】Dart是什么?Dart和Flutter有什么关系? 👏🏻 正在学 Flutter 的同学,你好! 😊 本专栏是解决 Flutter 面试过程中可能出现的问题,而进行汇总整理的。一个问题一篇文章,尽可能详细解答,满足面试需求。 🔍 想解决开发中的零散问题?碎片化教程 👉 Flutte

    2024年02月22日
    浏览(46)
  • 【Dart】Dart学习(二)内置类型

    Dart 语言支持下列内容: Numbers (int, double) Strings (String) Booleans (bool) Lists (也被称为 arrays) Sets (Set) Maps (Map) Runes (常用于在 Characters API 中进行字符替换) Symbols (Symbol) The value null (Null) 使用字面量来创建对象也受到支持。例如 ‘This is a string’ 是一个字符串字面量,true 是一个布尔

    2024年02月09日
    浏览(33)
  • Flutter学习2 - Dart

    Dart语言特点: Dart 2.0 开始便是强类型语言,而且是静态类型的(可以类比Java,C#等) 强类型语言的优点:所有类型的检查必须在编译的时候完成 前端开发的 js 语言是弱类型的语言 强类型的语言需要在定义的时候指定类型,如果不指定,编译器也可以在赋值的时候推断出变

    2024年02月21日
    浏览(46)
  • 【Flutter】Flutter Dart 获取当前时间戳

    在日常的软件开发中,我们经常需要获取当前的时间戳。无论是用于日志记录,还是用于生成唯一标识符,或者是用于时间同步,时间戳都发挥着重要的作用。 本文将详细介绍如何在 Flutter 和 Dart 中获取当前时间戳。 通过阅读本文,你将掌握以下知识: 了解时间戳的重要性

    2024年02月12日
    浏览(39)
  • 无涯教程-Flutter - Dart简介

    Dart是一种开源通用编程语言,它最初是由Google开发的, Dart是一种具有C样式语法的面向对象的语言,它支持诸如接口,类之类的编程概念,与其他编程语言不同,Dart不支持数组, Dart集合可用于复制数据结构,例如数组,泛型和可选类型。 以下代码显示了一个简单的Dart程序

    2024年02月10日
    浏览(53)
  • Flutter Dart语言(05)异步

    该系列教程主要是为有一定语言基础 C/C++的程序员,快速学习一门新语言所采用的方法,属于在C/C++基础上扩展新语言的模式。 在Dart语言中,虽然没有像其他语言(如Java、C++、Python)中的传统多线程概念,但它采用了异步(asynchronous)编程模型来处理并发任务。Dart使用asy

    2024年02月14日
    浏览(39)
  • Flutter Dart语言(04)库操作

    该系列教程主要是为有一定语言基础 C/C++的程序员,快速学习一门新语言所采用的方法,属于在C/C++基础上扩展新语言的模式。 引入代码如下所示: 一般从官方网站:Page 1 | Top packages中 搜索需要的第三方库,打开项目中的配置文件,名为:pubspec.yaml,找到dependencies选项,这

    2024年02月14日
    浏览(41)
  • flutter的引擎,Dart语言概括

    Dart是谷歌开发的, 类型安全的 , 面向对象 的编程语言,被应用于 Web、服务器、移动应用和物联网 等领域。 dart是谷歌在2011年推出的编程语言。谷歌希望使用dart来取代JavaScript。谷歌是一个颠覆式创新公司,谷歌退出golang是为了取代java,c++。谷歌退出flutter就是为了取代R

    2023年04月22日
    浏览(43)
  • 【Flutter】下载安装Flutter并使用学习dart语言

    安装flutter, 并使用flutter内置的dartSDK学习使用dart语言。 编辑器: Android Studio fluuter 版本 : flutter_windows_3.13.1 内置dartSDK : 3.1.0 dart路径路径: flutter安装路径bincachedart-sdk flutter下载地址 官网的下载描述蛮详细的,直接用就行。 Android Studio 需要到官网下载安装包。 如果你c盘容

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包