现在位置: 首页 > Swift 教程 > 正文

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 发展历程

了解版本演进能帮你判断一段老代码是否还能用,下面这张表列出了每个重要版本的关键变化。

年份版本里程碑
2014Swift 1.0Apple 在 WWDC 发布,随 Xcode 6 提供
2015Swift 2.0宣布开源,新增错误处理、协议扩展、guard
2016Swift 3.0API 命名大改,参数标签规则调整,移除 C 风格 for 循环
2017Swift 4.0字符串 API 改进,引入 Codable
2019Swift 5.0ABI 稳定,二进制框架可以跨版本复用,引入 Result
2021Swift 5.5引入 async/await(SE-0296)、actor 与结构化并发
2022Swift 5.7引入 if let x { 简写绑定与 any 存在类型
2023Swift 5.9引入宏、package 访问级别与 C++ 互操作
2024Swift 6.0引入严格并发检查,编译期拦截数据竞争

从 Swift 5.5 开始,语言进入了「每年两个小版本」的稳定节奏,语法改动越来越小,工程能力越来越强。

Swift 6 的重点不是新语法,而是把并发安全从「运行时可能崩溃」提前到「编译期直接报错」。


为什么选择 Swift

选择一门语言,通常看四点:安全、性能、表达力和生态,Swift 在这四点上的表现都比较均衡。

安全 是 Swift 最强调的设计目标。

可选类型 Optional 强制你在使用一个可能为空的值之前先处理空值,从语言层面消灭了「空指针解引用」这类崩溃。

类型安全让不同类型之间不会隐式转换,例如 IntDouble 必须显式转换才能运算,编译期就能发现类型错误。

整数溢出默认会直接终止程序而不是静默回绕,这避免了大量难以排查的数值 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 程序

按照惯例,第一个程序从输出一行文字开始。

实例

// 我的第一个 Swift 程序
print("Hello, World!")

把上面的代码保存为 hello.swift,然后在终端执行:

$ swift hello.swift
Hello, World!

print 是 Swift 标准库提供的输出函数,它会自动在末尾换行。

和 C 语言不同,Swift 不需要写 main 函数,也不需要分号,文件顶层的代码会按顺序直接执行。

再看一个稍微完整一点的例子,它演示了类型推断和字符串插值:

实例

import Foundation

// 类型推断:编译器自动判断 site 是 String
let site = "RUNOOB"
let year = 2024

// 字符串插值:用 \( ) 把值嵌入字符串
print("欢迎来到 \(site),当前教程年份 \(year)")

运行结果:

欢迎来到 RUNOOB,当前教程年份 2024

let 声明常量,var 声明变量,两者的区别会在第 4 篇详细展开。

注意:字符串插值写在双引号内部,语法是反斜杠加圆括号 \(表达式),不要写成其他语言里的 {}%s