Swift 简介
Swift 是 Apple 于 2014 年发布的一门通用编程语言,主要用来开发 iOS、iPadOS、macOS、watchOS、tvOS 应用,2015 年开源后交给 Swift 社区与 Apple 共同维护,编译器、标准库、包管理器的源码都可以在 GitHub 上找到。
Swift 把 C 与 Objective-C 的优点结合在一起,同时摆脱了 C 兼容性带来的历史包袱,与 Objective-C 相比,Swift 语法更简洁,并且把空值安全、类型安全、内存管理这些容易出错的地方交给编译器在编译期检查。

Swift 是一门编译型语言,源码先由 Swift 编译器编译成机器码,再直接运行,不需要虚拟机。
Swift 同时支持面向过程、面向对象、函数式和面向协议四种编程范式。
注意:Swift 的语法在 Swift 3 有过一次大改,网上的老教程如果还在用 println、++、C 风格 for 循环,基本都是 Swift 2 时代的写法,已经无法编译。
Swift 发展历程
了解版本演进能帮你判断一段老代码是否还能用,下面这张表列出了每个重要版本的关键变化。
| 年份 | 版本 | 里程碑 |
|---|---|---|
| 2014 | Swift 1.0 | Apple 在 WWDC 发布,随 Xcode 6 提供 |
| 2015 | Swift 2.0 | 宣布开源,新增错误处理、协议扩展、guard |
| 2016 | Swift 3.0 | API 命名大改,参数标签规则调整,移除 C 风格 for 循环 |
| 2017 | Swift 4.0 | 字符串 API 改进,引入 Codable |
| 2019 | Swift 5.0 | ABI 稳定,二进制框架可以跨版本复用,引入 Result |
| 2021 | Swift 5.5 | 引入 async/await(SE-0296)、actor 与结构化并发 |
| 2022 | Swift 5.7 | 引入 if let x { 简写绑定与 any 存在类型 |
| 2023 | Swift 5.9 | 引入宏、package 访问级别与 C++ 互操作 |
| 2024 | Swift 6.0 | 引入严格并发检查,编译期拦截数据竞争 |
从 Swift 5.5 开始,语言进入了「每年两个小版本」的稳定节奏,语法改动越来越小,工程能力越来越强。
Swift 6 的重点不是新语法,而是把并发安全从「运行时可能崩溃」提前到「编译期直接报错」。
为什么选择 Swift
选择一门语言,通常看四点:安全、性能、表达力和生态,Swift 在这四点上的表现都比较均衡。
安全 是 Swift 最强调的设计目标。
可选类型 Optional 强制你在使用一个可能为空的值之前先处理空值,从语言层面消灭了「空指针解引用」这类崩溃。
类型安全让不同类型之间不会隐式转换,例如 Int 和 Double 必须显式转换才能运算,编译期就能发现类型错误。
整数溢出默认会直接终止程序而不是静默回绕,这避免了大量难以排查的数值 bug。
快速 是第二个优势。
Swift 编译器使用 LLVM 后端,会做大量内联、泛型特化和内存优化,性能接近 C 语言,远高于脚本语言。
字符串、数组、字典等基础类型都用结构体实现,配合写时复制(COW)机制,既有值语义的安全性,又有引用语义的效率。
表达力 让代码更接近自然语言。
字符串插值、闭包简写、协议扩展、属性包装器等特性,让很多在其他语言里需要写几十行的逻辑,在 Swift 里几行就能表达清楚。
跨平台 是 Swift 从 2015 年开源后逐步补齐的能力。
Swift 现在可以在 macOS、Linux、Windows 上编译运行,也支持服务器端开发和嵌入式设备。
Swift 能做什么
Swift 的应用场景早已不限于 iPhone 应用,下面按领域说明它现在能做什么。
| 领域 | 典型用途 | 常用框架 |
|---|---|---|
| Apple 平台应用 | iOS、iPadOS、macOS、watchOS、tvOS 的界面与逻辑 | SwiftUI、UIKit、AppKit |
| 服务端开发 | REST API、Web 服务、微服务 | Vapor、Hummingbird |
| 系统与命令行工具 | 脚本、命令行程序、系统服务 | Foundation、SwiftPM |
| 机器学习 | 模型推理与训练 | Create ML、swift-coreml |
| 嵌入式 | 单片机与资源受限设备 | Embedded Swift |
如果你是初学者,建议从 Apple 平台应用入手,因为这是 Swift 工具链最成熟、资料最多的方向。
如果你已经熟悉后端开发,也可以直接用 Vapor 写一个 Web 服务,用同一门语言覆盖前端和后端。
第一个 Swift 程序
按照惯例,第一个程序从输出一行文字开始。
实例
print("Hello, World!")
把上面的代码保存为 hello.swift,然后在终端执行:
$ swift hello.swift Hello, World!
print 是 Swift 标准库提供的输出函数,它会自动在末尾换行。
和 C 语言不同,Swift 不需要写 main 函数,也不需要分号,文件顶层的代码会按顺序直接执行。
再看一个稍微完整一点的例子,它演示了类型推断和字符串插值:
实例
// 类型推断:编译器自动判断 site 是 String
let site = "RUNOOB"
let year = 2024
// 字符串插值:用 \( ) 把值嵌入字符串
print("欢迎来到 \(site),当前教程年份 \(year)")
运行结果:
欢迎来到 RUNOOB,当前教程年份 2024
let 声明常量,var 声明变量,两者的区别会在第 4 篇详细展开。
注意:字符串插值写在双引号内部,语法是反斜杠加圆括号 \(表达式),不要写成其他语言里的 {} 或 %s。
