美文网首页Flutter
Flutter 学习之十一 enum(枚举)好用的写法

Flutter 学习之十一 enum(枚举)好用的写法

作者: MQ_Twist | 来源:发表于2022-12-02 16:15 被阅读0次

我猜不同的笑点,代表不同的智力水平。

前言

今年四月初写Flutter的时候,觉得里面的枚举着实有点难受,先不说Swift了,和oc相比都差太多,最起码oc能赋值。不知怎的刚才突发奇想,仔细研究一下Flutter枚举,没想到还有真有好用的写法。

正文

如果枚举值对应的值是从0开始递增的,那就太好了,直接下面写就行了。

enum RoomType {
  /// 游戏
  game,

  /// 歌厅
  song,

  /// 直播
  live,
}

使用的时候直接用对应的index就ok,例:

int roomType = RoomType.song.index;   /// 值为1

但是,如果枚举的值不是从0开始的怎么办?如果枚举值对应的是字符串呢?没关系,写扩展。

  • 枚举扩展

extension RoomTypeValue on RoomType {
  String get value {
    String _value = '';
    switch (this) {
      case RoomType.game:
        _value = '1';
        break;
      case RoomType.song:
        _value = '3';
        break;
      case RoomType.live:
        _value = '5';
        break;
      default:
    }
    return _value;
  }
}

使用:

String roomType = RoomType.song.value;  /// 值为 '3'

可以看出,如果想对应其他的整型的值,就再写一个get方法,然后再用switch case即可,对于前期学习的我就凑合着用了,但内心还是觉得这种写法有点丑陋。

万幸的是,随着 2022 年 5 月在 Google I/O上发布Flutter 3.0,我们不必再依赖这些令人长长的代码了。来看一下用最新写法替代上面的扩展吧。

  • 枚举新写法

enum RoomType {
  /// 游戏
  game('1'),

  /// 歌厅
  song('3'),

  /// 直播
  live('5');

  final String value;
  const RoomType(this.value);
}

使用:

String roomType = RoomType.song.value;  /// 值为 '3'

简洁!好用!
有的小伙伴会说,如果还对应整型值呢?没关系,往下看:

enum RoomType {
  /// 游戏
  game('1', 1),

  /// 歌厅
  song('3', 3),

  /// 直播
  live('5', 5);

  final String value;
  final int number;
  const RoomType(this.value, this.number);
}

使用:

String roomType = RoomType.song.value;  /// 值为 '3'
int roomType = RoomType.song.number;  /// 值为 3

由此可见,想映射啥就映射啥,想映射几个就映射几个,有种鸟枪换炮的感觉,恐怖如斯。

后记

我查阅的资料的说的是3.0以后可以使用,我用的Dart版本是3.0.5,但是实测只要是2.17.0以后就行了,具体为啥没有咋研究。

相关文章

  • Flutter 学习之十一 enum(枚举)好用的写法

    我猜不同的笑点,代表不同的智力水平。 前言 今年四月初写Flutter的时候,觉得里面的枚举着实有点难受,先不说S...

  • OC中枚举写法 以及 字符串类型枚举实现探索

    常见枚举写法 C语言模式的枚举写法:enum 普通【整型】枚举写法 :NS_ENUM 位移枚举 :NS_OPTIO...

  • Swift Day03 枚举 可选项

    一、枚举 1. 枚举(enum)的基本写法? 2. 枚举(enum)的关联值(Associated Value)?...

  • Swift---8.枚举

    枚举写法(以enum关键字开头,后跟名称,{}内是枚举内容,每一个枚举值使用关键字case标志)enum Week...

  • 关于iOS的枚举

    iOS的枚举写法有很多种. typedef enum{environmentDebug = 1, /< ...

  • Swift枚举

    Swift中,枚举的创建方式如下; /*写法1*/ enum LTSeasonOne{ case FIRST ...

  • 枚举

    枚举 wiki Java的枚举类型用法介绍 深入理解Java枚举类型(enum) 为什么要用enum? 学习计划 ...

  • Swift-枚举 enum

    本文主要介绍enum的常见使用形式,1、常规枚举写法 2、字符串类型枚举 枚举值和原始值rawValue的关系为c...

  • swift3语法(八)

    枚举/结构体 枚举 定义形式enum 枚举名 { 枚举值} // 例如enum CompassPoint {...

  • iOS枚举

    一、普通枚举 1、写法 NS_ENUM 标示;NSInteger 固定类型,不能为NSString其他类型;Col...

网友评论

    本文标题:Flutter 学习之十一 enum(枚举)好用的写法

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