ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[Flutter] 枚举类enum与包拓展extension

2022-04-25 16:33:21  阅读:256  来源: 互联网

标签:case return extension Season enum 枚举 SPRING print Flutter


枚举类Enum

简单描述应用场景:

通过接口异步获取数据时,发起请求后,一般有三种状态

等待:LOADING

成功:SUCCESS

错误:ERROR

enum getDataFromApi(
LOADING,//等待
SUCCESS,//成功
ERROR	//错误
)

这样就可以获取接口数据的代码解耦,你只需要通过对应的枚举变量来写对应的实现(枚举类本身不写实现,一般通过switch或者if语句来判断)。

  • 枚举是一种有穷序列集的数据类型

  • 使用关键字enum定义一个枚举

  • 枚举常用于代替常量,控制语句等

enum Season{
  SPRING,//春天
  SUMMER,//夏天
  AUTUWN,//秋天
  WINTER //冬天
}

void main() {
  Season season = Season.SPRING;
  switch (season) {
    case Season.SPRING:
      print("春");
      break;
    case Season.SUMMER:
      print("夏");
      break;
    case Season.AUTUWN:
      print("秋");
      break;
    case Season.WINTER:
      print("冬");
      break;
  }
}

//output: 春

包拓展extension

extension的主要功能是给已经存在的类添加新的member function,往里面增加新的函数。可以对Iterable,String这样的常用类增加一些方法

对String添加拓展

extension StringToNumber on String {
  int toInt() {
    return int.parse(this);
  }
  // ···
}

使用

import 'string_to_number.dart';
// ···
print('18'.toInt()); 

//output: 18

枚举类和包拓展结合

通过包拓展,可以另外写一个类对枚举类进行实现,这样既不用动枚举类,也不用在逻辑页面写一大堆枚举类的实现。

void main() {
 //使用
 print(Season.SPRING.seasonName);
 //output: 春天
}

//枚举类
enum Season{
  SPRING,//春天
  SUMMER,//夏天
  AUTUWN,//秋天
  WINTER //冬天
}

//对枚举类的拓展
extension PrintSeason on Season{
    //枚举变量的实现方法
  String get seasonName{
    switch(this){
      case Season.SPRING:
        return '春天';
      case Season.SUMMER:
        return '夏天';
      case Season.AUTUWN:
        return '秋天';
      case Season.WINTER:
        return '冬天';
      default:
        return '无';
    }
  }
  
}

标签:case,return,extension,Season,enum,枚举,SPRING,print,Flutter
来源: https://www.cnblogs.com/TobuTobu/p/16190828.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有