Swift 已突破 Apple 生态系统的界限
\n\n长期以来,Swift 语言一直与 iOS、macOS 和 watchOS 紧密关联。如果你想为 Android 或 Web 服务器编写应用程序,你会选择 Java、Kotlin 或 Python。但时代已经变了。如今,Swift 跨平台开发不再是爱好者的实验,而是一个成熟的行业,拥有 Linux 内核级别的支持、Apple 的官方工具以及活跃的社区。
\n\n在本文中,我们将探讨如何为 Windows、Linux、Android 甚至 Web 编写 Swift 代码。你将看到真实的代码示例,了解 Vapor 和 SwiftUI 框架,并获得入门路线图。我们开始吧!
\n\n为什么选择 Swift?超越 Apple 的三个理由
\n\n1. 性能与内存安全
\nSwift 是一种编译型语言,具有自动引用计数(ARC)。它提供了接近 C++ 的速度,同时在编译层面防止内存泄漏和空指针错误。这对于服务器和桌面应用程序至关重要。
\n\n2. 现代语法
\n协议、扩展、泛型、可选类型——Swift 吸收了函数式和面向对象编程的优点。代码简洁且可读性强。
\n\n3. 统一的代码库
\n使用 Swift 编写一次逻辑,即可在 iOS、Android(通过 Swift Android Toolchain)、Linux、Windows 甚至浏览器(通过 WebAssembly)上运行。这降低了维护成本,并加快了进入新平台的速度。
\n\nSwift 跨平台开发工具集
\n\n在编写代码之前,让我们先了解需要哪些工具。以下是 2025 年 Swift 跨平台开发 的基本技术栈:
\n\n- \n
- Swift Package Manager (SPM) — 标准包管理器,适用于所有平台。 \n
- Vapor — 最流行的 Swift Web 框架。用于服务器逻辑、REST API、WebSocket。 \n
- SwiftUI — 声明式 UI 框架。在 macOS 和 iOS 上原生运行,在其他平台上通过
SwiftUI-Web或Tokamak运行。 \n - Swift for TensorFlow / NumPy — 机器学习和科学计算。 \n
- Android NDK + Swift Android Toolchain — 将 Swift 代码编译到 Android 平台。 \n
- WebAssembly (WASI) — 在浏览器中运行 Swift。 \n
使用 Vapor 编写 Swift 服务器(Linux / macOS / Windows)
\n\n我们从最简单且最实用的开始——Web 服务器。Vapor 是 Express.js 或 Flask 的成熟替代品,但基于 Swift。代码可在 Linux、macOS 和 Windows(通过 Swift 6)上运行。
\n\n安装 Vapor
\nbrew install vapor # macOS\ncurl -sL https://apt.vapor.codes/install.sh | bash # Linux\n# Windows: 安装 Swift 6,然后通过 SPM 安装 vapor\n\nVapor 上的简单 REST API
\n创建一个项目并编写一个用于处理任务(ToDo)的端点:
\n\n// Sources/App/routes.swift\nimport Vapor\n\nfunc routes(_ app: Application) throws {\n // GET /hello\n app.get("hello") { req -> String in\n return "你好,跨平台 Swift!"\n }\n\n // GET /tasks\n app.get("tasks") { req -> [String] in\n return ["学习 Swift", "写文章", "在 Android 上运行"]\n }\n\n // POST /task\n app.post("task") { req -> String in\n let task = try req.content.decode(Task.self)\n return "已添加任务: \\(task.title)"\n }\n}\n\nstruct Task: Content {\n let title: String\n let isCompleted: Bool\n}\n\n使用命令 vapor run 启动服务器,然后打开 http://localhost:8080/hello。你将看到欢迎信息。相同的代码无需修改即可在 Ubuntu、Windows Server 和 macOS 上运行。
Android 上的 Swift:编写原生库
\n\n许多人认为