CommandLineKit
一个用于创建命令行界面的纯 Swift 库。
注意:CommandLineKit 的 master
需要使用 Xcode 10.2 / Swift 5.0。如果您正在使用更早版本的 Swift,请查看早期版本。
使用方法
CommandLine 的 API 设计简单易懂。
import CommandLineKit
let cli = CommandLineKit.CommandLine()
let filePath = StringOption(shortFlag: "f", longFlag: "file", required: true,
helpMessage: "Path to the output file.")
let compress = BoolOption(shortFlag: "c", longFlag: "compress",
helpMessage: "Use data compression.")
let help = BoolOption(shortFlag: "h", longFlag: "help",
helpMessage: "Prints a help message.")
let verbosity = CounterOption(shortFlag: "v", longFlag: "verbose",
helpMessage: "Print verbose messages. Specify multiple times to increase verbosity.")
cli.addOptions(filePath, compress, help, verbosity)
do {
try cli.parse()
} catch {
cli.printUsage(error)
exit(EX_USAGE)
}
print("File path is \(filePath.value!)")
print("Compress is \(compress.value)")
print("Verbosity is \(verbosity.value)")
有关附加选项类型,请参阅 Option.swift
。
要在项目中使用 CommandLineKit,请将其添加到工作空间,然后将 CommandLineKit.framework 添加到目标的 构建阶段/将库与二进制文件链接 设置。
如果您正在构建命令行工具并需要将其与其他框架嵌入其中,请按照该链接中的步骤操作,以将 Swift 框架链接到您的命令行工具。
如果您正在构建独立的命令行工具,您需要直接将 CommandLineKit 源文件添加到目标,因为 Xcode 尚无法构建包含 Swift 代码的静态库。
特性
自动生成的使用消息
Usage: example [options]
-f, --file:
Path to the output file.
-c, --compress:
Use data compression.
-h, --help:
Prints a help message.
-v, --verbose:
Print verbose messages. Specify multiple times to increase verbosity.
您可以通过提供formatOutput
函数来完全自定义使用消息。例如,[Rainbow](https://github.com/onevcat/Rainbow) 提供了一种方便的方式来生成带有颜色的输出
import Rainbow
cli.formatOutput = { s, type in
var str: String
switch(type) {
case .Error:
str = s.red.bold
case .OptionFlag:
str = s.green.underline
case .OptionHelp:
str = s.blue
default:
str = s
}
return cli.defaultFormat(str, type: type)
}
支持所有常用的标志样式
这些命令行是等效的
$ ./example -c -v -f /path/to/file
$ ./example -cvf /path/to/file
$ ./example -c --verbose --file /path/to/file
$ ./example -cv --file /path/to/file
$ ./example --compress -v --file=/path/to/file
可以使用'--'来停止选项处理,如同getopt(3)中那样。
智能处理负整数和浮点参数
这会将负42传递给整数选项,并将负3.1419传递给浮点选项
$ ./example2 -i -42 --float -3.1419
区域感知浮点解析
在区域使用不同的十进制分隔符时,浮点数将正确处理
$ LC_NUMERIC=sv_SE.UTF-8 ./example2 --float 3,1419
类型安全的枚举选项
enum Operation: String {
case create = "c"
case extract = "x"
case list = "l"
case verify = "v"
}
let cli = CommandLineKit.CommandLine()
let op = EnumOption<Operation>(shortFlag: "o", longFlag: "operation", required: true,
helpMessage: "File operation - c for create, x for extract, l for list, or v for verify.")
cli.setOptions(op)
do {
try cli.parse()
} catch {
cli.printUsage(error)
exit(EX_USAGE)
}
switch op.value {
case Operation.Create:
// Create file
case Operation.Extract:
// Extract file
// Remainder of cases
}
注意:枚举必须可以从字符串值初始化。
完全符合 Emoji 规范
$ ./example3 -👍 --👻
(请不要真的这样做)
许可协议
版权归属 (c) 2014 Ben Gollmer。
遵循 Apache 许可协议,版本 2.0(“许可协议”);除非法律要求或书面同意,否则不得使用本文件,除非符合许可协议。您可以在以下地址获取许可协议的副本:
http://www.apache.org/licenses/LICENSE-2.0
除非法律规定或书面同意,否则在许可证下分发的软件按“现状”提供,不提供任何明示或暗示的保证或条件。有关许可证下授予的权限和限制的具体语言,请参阅许可证。