CLI框架 для Swift: 为iOS和macOS打造强大的控制台工具
Swift不仅仅是用于移动应用的语言。随着Swift Package Manager(SPM)和诸如ArgumentParser这类框架的出现,开发者们得以创建适用于macOS甚至iOS(在服务器或CI/CD流程中)的完整控制台工具。Swift的CLI(命令行界面)框架能够解析命令行参数、处理标志、选项和子命令,并自动生成帮助文档。
本文将详细剖析最流行且官方的CLI框架之一——Swift ArgumentParser(由Apple开发)。您将学习如何通过SPM安装它、编写简单的控制台工具、添加子命令和参数,并看到用于实际任务的代码示例。
什么是Swift的CLI框架?
CLI框架是一种库,它接管了解析命令行字符串的日常琐事。您无需手动编写针对CommandLine.arguments的循环,而是以声明方式描述命令结构:哪些参数是必需的、哪些是可选的、支持哪些标志。框架会自动生成帮助文档(--help)并处理输入错误。
Swift ArgumentParser的主要特性:
- 声明式描述参数和选项
- 自动生成帮助和版本信息
- 支持子命令(如
git commit或swift build中的子命令) - 类型验证(Int、String、Double及自定义类型)
- 与SPM和Xcode集成
通过Swift Package Manager安装
将依赖项添加到您的Package.swift文件中:
// swift-tools-version:5.9import PackageDescription
let package = Package( name: "MyCLITool", dependencies: [ .package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.2.0") ], targets: [ .executableTarget( name: "MyCLITool", dependencies: [ .product(name: "ArgumentParser", package: "swift-argument-parser") ] ) ])然后执行swift build——库将被下载并编译。
编写第一个命令
创建一个简单的工具,按姓名和年龄问候用户。
import ArgumentParser
struct Greet: ParsableCommand { @Argument(help: "用户名") var name: String
@Option(name: .shortAndLong, help: "年龄") var age: Int?
mutating func run() throws { if let age = age { print("你好,\(name)!你\(age)岁了。") } else { print("你好,\(name)!") } }}
Greet.main()运行编译后的二进制文件:
./MyCLITool "安娜" --age 25# 输出:你好,安娜!你25岁了。
./MyCLITool "马克西姆"# 输出:你好,马克西姆!自动生成的帮助文档(--help)将显示所有参数和选项。
子命令:像真实工具一样的结构
CLI工具通常有多个子命令:create、delete、list。ArgumentParser原生支持这一点。
import ArgumentParser
struct TaskManager: ParsableCommand { static var configuration = CommandConfiguration( subcommands: [Add.self, List.self, Delete.self] )}
struct Add: ParsableCommand { @Argument(help: "任务文本") var text: String
func run() { print("任务已添加:\(text)") }}
struct List: ParsableCommand { func run() { print("任务列表:") }