EnumGen - 一个库和 CLI 工具,可以轻松地从字符串创建枚举

埃努姆根

EnumGen 是一个库和 CLI 工具,可以轻松地从字符串创建枚举。

用法

图书馆

let generator = try EnumGen(strings: Locale.isoLanguageCodes, enumName: "LanguageCode", enumType: "String")
try generator.generate()

结果

// This is a generated file.
// Generated by EnumGen, see https://github.com/Ryu0118/EnumGen

import Foundation

public enum LanguageCode: String {
    case aa
    case ab
    case ae
    case af
    case ak
    case am
    .......
}

参数

论点 类型 描述
字符串 字符串 要转换为枚举的字符串类型数组
枚举名称 字符串 枚举类型名称
枚举类型 字符串? 枚举继承的类型
路径 字符串 生成枚举文件的绝对路径。默认值设置为 #path

命令行界面工具

USAGE: enumgen [--separator <separator>] [--enum-name <enum-name>] [--delimiter <delimiter>] [--raw-value] [--enum-type <enum-type>] <path>

ARGUMENTS:
  <path>                  The path (relative or absolute) of the file you want to convert to enum

OPTIONS:
  -s, --separator <separator>
                          Separator to convert text files to enum cases (default: 
                          )
  -e, --enum-name <enum-name>
                          Name of enum type
  -d, --delimiter <delimiter>
                          If you want to recognize invalid_name as a case of enum, you can convert
                          it to lower camel case by setting the value of the —delimiter option to
                          "_" (like case invalidName)
  --raw-value             Assign a value to each element
  --enum-type <enum-type> Make enum inherit the specified type. Only integer literals, floating
                          point numeric literals, and string literals can be inherited (default:
                          String)
  -h, --help              Show help information.

Example1

To change a txt file that lists the names of SFSymbols to enum,

square.and.arrow.up
square.and.arrow.up.fill
square.and.arrow.up.circle
square.and.arrow.up.circle.fill
square.and.arrow.up.trianglebadge.exclamationmark
square.and.arrow.down
square.and.arrow.down.fill
square.and.arrow.up.on.square
square.and.arrow.up.on.square.fill
square.and.arrow.down.on.square
square.and.arrow.down.on.square.fill
rectangle.portrait.and.arrow.right
rectangle.portrait.and.arrow.right.fill
......

then run this.

$ enumgen sfsymbols.txt --raw-value --enum-name SFSymbols --delimiter .

Result

// This is a generated file.
// Generated by EnumGen, see https://github.com/Ryu0118/EnumGen

import Foundation

enum SFSymbols: String {
    case squareAndArrowUp = "square.and.arrow.up"
    case squareAndArrowUpFill = "square.and.arrow.up.fill"
    case squareAndArrowUpCircle = "square.and.arrow.up.circle"
    case squareAndArrowUpCircleFill = "square.and.arrow.up.circle.fill"
    case squareAndArrowUpTrianglebadgeExclamationmark = "square.and.arrow.up.trianglebadge.exclamationmark"
    case squareAndArrowDown = "square.and.arrow.down"
    case squareAndArrowDownFill = "square.and.arrow.down.fill"
    case squareAndArrowUpOnSquare = "square.and.arrow.up.on.square"
    case squareAndArrowUpOnSquareFill = "square.and.arrow.up.on.square.fill"
    case squareAndArrowDownOnSquare = "square.and.arrow.down.on.square"
    case squareAndArrowDownOnSquareFill = "square.and.arrow.down.on.square.fill"
    case rectanglePortraitAndArrowRight = "rectangle.portrait.and.arrow.right"
    case rectanglePortraitAndArrowRightFill = "rectangle.portrait.and.arrow.right.fill"
    ......
}

Example2

test.txt

invalid_name,invalid_file,invalid_url
$ enumgen test.txt --raw-value --enum-name Test --separator , --delimiter _ 

Result

// This is a generated file.
// Generated by EnumGen, see https://github.com/Ryu0118/EnumGen

import Foundation

enum Test: String {
    case invalidName = "invalid_name"
    case invalidFile = "invalid_file"
    case invalidUrl = "invalid_url"
}

Example3

color.txt

red
green
blue
$ enumgen color.txt --enum-name Colors

Result

// This is a generated file.
// Generated by EnumGen, see https://github.com/Ryu0118/EnumGen

import Foundation

enum Colors {
    case red
    case green
    case blue
}

GitHub

点击跳转