SwiftArgs 0.5.4

SwiftArgs 0.5.4

Ardalan Samimi 维护。



SwiftArgs 0.5.4

Build Status codecov sonar Pod version release

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 提供了四种不同的参数类型:CommandOptionBoolOptionStringOptionEnumOption

将这些提供给 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创建。