Build Status codecov sonar Pod version release

SwiftArgs 是一个小型 Swift 框架,用于创建简单的命令行界面。

安装

您可以使用 Swift Package Manager 或 Cocoapods 安装 SwiftArgs

Swift Package Manager

SwiftArgs 作为依赖项添加到 Package.swift

// Package.swift

dependencies: [
    .package(url: "https://github.com/pkrll/SwiftArgs", from: "0.5.0")
]
CocoaPods

SwiftArgs 添加到您的 Podfile 中

pod 'SwiftArgs', '~> 0.5'

用法

SwiftArgs 提供了四种不同的参数类型:CommandOptionBoolOptionStringOptionEnumOption

将这些提供给 SwiftArgs 对象,并运行 parse() 方法来验证和解析命令行参数(有关示例,请参见下文)。

CommandOption

CommandOption 代表一个命令,它可以接受自己的子参数

$ my_app init
$ my_app init --bare
$ my_app package init --type library
BoolOption

BoolOption 代表一个布尔标志

$ my_app --help
StringOption

StringOption 代表一个可以接受任意值的选项

$ my_app --set-path /some/path
EnumOption

EnumOption<T> 代表一个仅接受预定义值的选项

$ 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 创建。