Swift CLI 工具:从零开始创建命令行工具

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

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

开始课程

您的第一个 Swift CLI:从想法到成品工具

\n\n

您是否曾想过,终端中那些便捷的工具——curl、git、brew——是如何创建的?其实,编写自己的 Swift CLI 工具 并不比制作一个简单的 iOS 应用更复杂。而且,Swift 非常适合这个任务:它速度快、内存安全,并且在 macOS 和 Linux 上都能出色运行。

\n\n

在本文中,我们将从零开始创建一个完整的控制台工具,它能够解析参数、输出彩色文本,甚至处理错误。您将学习如何通过 Swift Package Manager 配置项目,集成强大的 ArgumentParser 库,并准备将工具发布到 Homebrew。准备好了吗?开始吧!

\n\n

为什么 Swift 适合 CLI?

\n\n

当谈到 创建命令行工具 时,许多人首先想到的是 Python、Bash 或 Go。但 Swift 是一匹黑马,令人惊喜:

\n\n
    \n
  • 速度堪比 C 语言 — 您的工具将运行飞快。
  • \n
  • 安全的内存管理 — 没有段错误和内存泄漏。
  • \n
  • 跨平台 — Swift 在 Linux 上运行良好,因此您的 CLI 甚至可以在服务器上运行。
  • \n
  • 现代语法 — 代码读起来像优美的散文。
  • \n
  • 庞大的生态系统 — Swift Package Manager (SPM) 让您可以访问数千个库。
  • \n
\n\n

顺便提一下,如果您已经在使用 Python 编写代码,并想尝试一些新的 CLI 开发方式,Swift 将是一个绝佳选择:您将获得一个无依赖、内存占用极小的原生二进制文件。

\n\n

项目配置:Swift Package Manager

\n\n

首先,创建一个新项目。打开终端并执行:

\n\n
mkdir MyCLI\ncd MyCLI\nswift package init --type executable
\n\n

该命令会创建标准的 SPM 结构。请注意 Package.swift 文件——这是您项目的核心。我们来编辑它,添加对 Apple/Swift ArgumentParser 的依赖:

\n\n
// swift-tools-version:5.9\nimport PackageDescription\n\nlet package = Package(\n    name: "MyCLI",\n    dependencies: [\n        .package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.2.0")\n    ],\n    targets: [\n        .executableTarget(\n            name: "MyCLI",\n            dependencies: [\n                .product(name: "ArgumentParser", package: "swift-argument-parser")\n            ]\n        )\n    ]\n)
\n\n

现在执行 swift build。SPM 会自动下载库并构建项目。如果一切顺利——您就可以开始编写代码了!

\n\n

编写第一个命令:增强版 Hello World

\n\n

打开 Sources/MyCLI/main.swift,编写一个简单的命令来输出问候语。但不仅仅是 "Hello, World!",而是使用参数:

\n\n
import ArgumentParser\n\nstruct HelloCommand: ParsableCommand {\n    static let configuration = CommandConfiguration(\n        commandName: "hello",\n        abstract: "输出问候语",\n        discussion: "使用此命令向世界或特定的人打招呼。"\n    )\n\n    @Argument(help: "要问候的人的名字")\n    var name: String = "World"\n\n    @Option(name: .shortAndLong, help: "重复次数")\n    var count: Int = 1\n\n    func run() throws {\n        for _ in 0..<count {\n            print("你好,\\(name)! 👋")\n        }\n    }\n}\n\nHelloCommand.main()
\n\n

运行:swift run MyCLI hello --count 3 "iOS Developer"。您将看到:

\n\n
你好,iOS Developer! 👋\n你好,iOS Developer! 👋\n你好,iOS Developer! 👋
\n\n

请注意:Argumen

博客

书籍推荐