开天辟地 HarmonyOS(鸿蒙) - ArkTS 类: enum

源码 https://github.com/webabcd/HarmonyDemo
作者 webabcd

开天辟地 HarmonyOS(鸿蒙) - ArkTS 类: enum

示例如下:

pages\arkts\class\Enum.ets

import { TitleBar, MyLog } from '../../TitleBar';

@Entry
@Component
struct EnumDemo {
  build() {
    Column() {
      TitleBar()
      Text("代码示例结合 HiLog 日志一起看")
    }
  }
}


{
  // 简单枚举
  enum Status {Ok, Error};
  // 通过枚举名称获取枚举值
  MyLog.d(`${Status["Ok"]}, ${Status["Error"]}`); // 0, 1
  // 通过枚举值获取枚举名称
  MyLog.d(`${Status[0]}, ${Status[1]}`); // Ok, Error
}

{
  // 简单枚举的赋值
  enum Status {Ok = 100, Error = 200};
  MyLog.d(`${Status["Ok"]}, ${Status["Error"]}`); // 100, 200
  MyLog.d(`${Status[100]}, ${Status[200]}`); // Ok, Error
}

{
  // 定义枚举值时可以使用简单的表达式
  enum Status { Ok = 1, Error = 1 << 2 };
  MyLog.d(`${Status.Ok}, ${Status.Error}`); // 1, 4
}

{
  // 常量枚举
  const enum Status { Ok, Error };
  MyLog.d(`${Status.Ok}, ${Status.Error}`); // 0, 1
}

{
  // 常量枚举的赋值
  const enum Status { Ok = "Ok", Error = "Error" };
  MyLog.d(`${Status.Ok}, ${Status.Error}`); // Ok, Error
}

{
  // 字符串转枚举
  enum Status {Ok, Error};
  let status = Status['Ok'] as Status
  MyLog.d(`${status == Status.Ok}`); // true

  // 枚举转字符串
  MyLog.d(`${Status[status]}`); // Ok

  // 枚举值就是整型值
  MyLog.d(`${status == 0}`); // true

  enum Status2 {X, Y};
  // 下面这句会编译时报错
  // MyLog.d(`${Status.Ok == Status2.X}`);
  MyLog.d(`${Number(Status.Ok) == Number(Status2.X)}`); // true
}

{
  enum Permission {
    None = 0,
    Read = 1,     // 0001
    Write = 2,    // 0010
    Publish = 4,  // 0100
    Full = 7,     // 0111
  }

  // 通过按位或(|)实现 flag 型的枚举
  MyLog.d(`${(Permission.Read | Permission.Write)}`); // 3
  MyLog.d(`${(Permission.Read | Permission.Write | Permission.Publish)}`); // 7
  MyLog.d(`${(Permission.Full)}`); // 7

  // 判断 flag 型的枚举是否包含指定的枚举成员
  MyLog.d(`${((Permission.Read | Permission.Write) & Permission.Write) == Permission.Write}`); // true
  MyLog.d(`${(Permission.Full & Permission.Write) == Permission.Write}`); // true
}

{
  enum Status {Ok, Error};
  // 遍历枚举(如下方式会先按照枚举值遍历一遍,再按照枚举名称遍历一遍)
  Object.keys(Status).forEach(key => {
    MyLog.d(`key:${key}, value:${Status[key]}`);
    // key:0, value:Ok
    // key:1, value:Error
    // key:Ok, value:0
    // key:Error, value:1
  });
}

源码 https://github.com/webabcd/HarmonyDemo
作者 webabcd

posted @ 2025-02-05 13:32  webabcd  阅读(253)  评论(0)    收藏  举报