Swiftline 是一组帮助你创建命令行应用程序的工具。Swiftline 受highline的启发。
Swiftline 包含以下内容
Colorize 帮助在将字符串打印到终端之前对其进行样式设置。您可以更改文字颜色、文字背景和文字样式。Colorize 通过扩展 String
结构来为它添加样式。
要更改文字颜色,使用 string.f
或 string.foreground
print("Red String".f.Red)
print("Blue String".foreground.Blue)
要更改文字背景颜色,使用 string.b
或 string.background
print("I have a white background".b.White)
print("My background color is green".background.Green)
要更改文字背景样式,使用 string.s
或 string.style
print("I am a bold string".s.Bold)
print("I have an underline".style.Underline)
您可以组合前景、背景和样式
print("I am an underlined red on white string".s.Underline.f.Red.b.White)
Ask, Choose 和 Agree 用于提示用户获取更多信息。
Ask 向用户展示一个提示并等待用户输入。
let userName = ask("Enter user name?")
userName
将包含用户输入的名称
Ask 可以用于请求整型、双精度浮点型或浮点型的值,例如请求一个整型
let age = ask("How old are you?", type: Int.self)
如果用户打印的内容无法转换为整型,则会向用户展示一个新的提示,此提示会一直显示,直到用户输入一个整型
How old are you?
None
You must enter a valid Integer.
? Error
You must enter a valid Integer.
? 5
5
通过在 AskSettings
上调用 addInvalidCase
添加验证。
let name = ask("Who are you?") { settings in
settings.addInvalidCase("Snuffles is not allowed") { value in
value.containsString("Snuffles")
}
}
如果用户输入了 Snuffles
,Ask 将会持续显示 addInvalidCase
传递给它的无效消息
Who are you?
Snuffles
Snuffles is not allowed
? Snuffles
Snuffles is not allowed
? Snowball
Your name is Snowball
AskSettings.confirm
将会在用户输入后要求用户确认他们的选择
let name = ask("Who are you?") { settings in
settings.confirm = true
}
上面的代码将输出
Who are you?
Snuffles
Are you sure? YES
Your name is Snuffles
“选择”用于提示用户在几个可能的选项之间选择一个。
例如,显示编程语言的选项。
let choice = choose("Whats your favorite programming language? ",
choices: "Swift", "Objective C", "Ruby", "Python", "Java :S")
这将打印:
1. Swift
2. Objective C
3. Ruby
4. Python
5. Java :S
Whats your favorite programming language?
用户可以选择数字(1..5)或项目本身。如果用户输入错误,将会一直提示用户,直到用户做出了正确的选择。
Whats your favorite programming language? JavaScript
You must choose one of [1, 2, 3, 4, 5, Swift, Objective C, Ruby, Python, Java :S].
? BBB
You must choose one of [1, 2, 3, 4, 5, Swift, Objective C, Ruby, Python, Java :S].
? Swift
You selected Swift, good choice!
您可以自定义每个选择元素的返回值。例如,如果要从选择中获取一个整数值,可以这样操作:
let choice = choose("Whats your favorite programming language? ", type: Int.self) { settings in
settings.addChoice("Swift") { 42 }
settings.addChoice("Objective C") { 20 }
}
左侧的数字可以改为字母,以下是操作方法:
let choice = choose("Whats your favorite programming language? ", type: String.self) { settings in
//choice value will be set to GOOD
settings.addChoice("Swift") { "GOOD" }
//choice value will be set to BAD
settings.addChoice("Java") { "BAD" }
settings.index = .Letters
settings.indexSuffix = " ----> "
}
这将打印:
a ----> Swift
b ----> Java
Whats your favorite programming language?
“同意”用于询问用户一个是/否的问题。它返回一个表示用户输入的布尔值。
let choice = agree("Are you sure you want to `rm -rf /` ?")
如果用户输入任何无效输入,则“同意”将继续提示用户是/否问题。
Are you sure you want to `rm -rf /` ? What!
Please enter "yes" or "no".
Are you sure you want to `rm -rf /` ? Wait
Please enter "yes" or "no".
Are you sure you want to `rm -rf /` ? No
You entered false
“运行”提供了一种快速、简洁的方式来运行外部命令并读取其标准输出和标准错误。
要执行简单命令,可以这样操作:
let result = run("ls -all")
print(result.stdout)
result
类型是 RunResults
,它包含以下内容:
exitStatus
:命令的退出状态stdout
:已执行命令的标准输出stderr
:已执行命令的标准错误虽然 run("command")
可以通过空格来拆分参数,但有时参数拆分并不是显而易见的。如果有多个参数需要传递给要执行的命令,应使用 run(command: String, args: String...)
。上面的代码可以转换为:
let result = run("ls", args: "-all")
要自定义运行函数,可以传递一个自定义块。
let result = run("ls -all") { settings in
settings.dryRun = true
settings.echo = [.Stdout, .Stderr, .Command]
settings.interactive = false
}
settings
是一个 RunSettings 的实例,它包含以下变量:
settings.dryRun
:默认为 false。如果为 false,则实际上会运行命令。如果为 true,则将命令记录到结果的 stdout
参数中。settings.echo
:自定义打印到标准输出的消息,echo
可以包含以下内容中的任何一个:EchoSettings.Stdout
:将运行命令返回的标准输出打印到终端EchoSettings.Stderr
:将运行命令返回的标准错误打印到终端EchoSettings.Command
:将执行的命令打印到终端settings.interactive
:默认为 false。如果设置为 true,则使用 system
内核功能执行命令,并且仅捕获退出状态。如果设置为 false,使用 NSTask
执行命令,并捕获标准输出和标准错误。如果预期启动的命令将通过标准输入询问用户输入,则将 interactive
设置为 true。runWithoutCapture("command")
是以交互模式快速运行命令的一种方法。返回值是命令的退出代码。
环境变量用于读取和写入传递给脚本的脚本。
// Set enviroment variable
Env.set("key1", "value1")
// Get environment variable
Env.get("SomeKey")
// Clear all variables
Env.clear()
// Get all keys and values
Env.keys()
Env.values()
返回传递给脚本的参数。例如,在调用 script -f1 val1 -f2 val2 -- val3 val4
时。
Args.all
返回所有原始参数的数组,在这个例子中它将是 ["-f1", "val1", "-f2", "val2", "--", "val3", "val4"]
Args.parsed
返回一个包含已解析参数映射和参数数组的结构,对于这个例子
Args.parsed.parameters
返回 ["val3", "val4"]
Args.parsed.flags
返回标志字典 ["f1": "val1", "f2", "val2"]
Args.parsed.command
返回可执行文件本身的名称 "script"
您可以使用CocoaPods、carthage和Swift包管理器安装Swiftline。
将swiftline作为依赖项添加到您的Package.swift
文件中。
import PackageDescription
let package = Package(name: "YourPackage",
dependencies: [
.Package(url: "https://github.com/Swiftline/Swiftline.git", majorVersion: 0, minor: 3),
]
)
要手动安装Swiftline,请将Pod/Swiftline
目录添加到您的项目中。
示例列表可以在这里找到。
测试可以在这里找到。他们可以从Xcode中正常运行。
文档可以在这里找到。
interactive
的需求Daniel Beere为创建标志@DanielBeere,查看danielbeere on dribble;Omar Abdelhafith是当前项目的维护者@ifnottrue