SwiftArgs 是一个用于创建简单命令行界面的小型 Swift 框架。
安装
您可以使用 Swift 包管理器或 Cocoapods 安装 SwiftArgs
Swift 包管理器
在 Package.swift
中将 SwiftArgs
作为依赖项添加
// Package.swift
dependencies: [
.package(url: "https://github.com/pkrll/SwiftArgs", from: "0.5.0")
]
CocoaPods
将 SwiftArgs
添加到您的 Podfile
pod 'SwiftArgs', '~> 0.5'
用法
SwiftArgs 提供了四种不同的参数类型:CommandOption
,BoolOption
,StringOption
和 EnumOption
。
将这些提供给 SwiftArgs
对象,并运行 parse()
方法来验证和解析命令行参数(请参见下文中的 示例)。
命令选项
命令选项
表示一个命令,它本身可以接受子参数。
$ my_app init
$ my_app init --bare
$ my_app package init --type library
布尔选项
布尔选项
表示一个布尔标志。
$ my_app --help
字符串选项
字符串选项
表示一个可以接受任意值的选项。
$ my_app --set-path /some/path
枚举选项
EnumOption
表示一个只接受预定义值的选项。
$ my_app --type library
示例
import Foundation
import SwiftArgs
enum BuildType: String {
case debug
case release
}
let help = BoolOption(
name: "help",
shortFlag: "h",
longFlag: "help",
description: "Display available options"
)
let version = BoolOption(
name: "version",
shortFlag: "v",
longFlag: "version",
description: "Display version information"
)
let buildType = EnumOption<BuildType>(
name: "BuildType",
shortFlag: "t",
longFlag: "type",
description: "Specify the build configuration: debug|release",
isRequired: true
)
let clean = CommandOption("clean", description: "Clean up any build artifacts")
let build = CommandOption("build", withArguments: [help, buildType], description: "Build the project")
let test = CommandOption("test", withArguments: [help, buildType], description: "Test the project")
let run = CommandOption("run", withArguments: [help, buildType], description: "Execute the project")
let args = SwiftArgs(arguments: [help, version, clean, build, test, run])
do {
try args.parse() // or try args.parse(["build", "--type", "debug"])
} catch {
args.printError(error)
args.printUsage()
exit(1)
}
/**
* Check if the BoolOption help (-h, --help) or version
* (-v --version) was specified with the value property.
*/
if help.value! {
var argument: Argument? = nil
if build.value { argument = build }
if test.value { argument = test }
if run.value { argument = run }
args.printUsage(argument)
} else if version.value! {
print("SwiftArgsDemo v1.0")
} else {
/**
* You can directly access the EnumOption's value property
* to check its value (nil if not used)...
*/
if buildType.value == BuildType.debug {
print("Build type: Debug!")
} else if buildType.value == BuildType.release {
print("Build type: Release!")
}
/**
* ... or to check which command it's associated with, use
* optional chaining to unwrap the nested arguments.
*/
if let bType = build.argument as? EnumOption<BuildType>, let value = bType.value {
switch value {
case BuildType.debug:
print("Build type: Debug!")
case BuildType.release:
print("Build type: Release!")
}
}
if build.value {
print("Commence building...")
}
}
致谢
这个框架在API方面深受CommandLineKit框架的启发。
作者
SwiftArgs由Ardalan Samimi创建。