Swift 的 CLI 框架:为 iOS/macOS 创建控制台工具

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

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("任务列表:") }

推荐