Swift 速查表
最后更新
Hello World 与基础
Swift 在顶层不需要任何样板代码,一行就能运行。
| 操作 | 语法 |
|---|---|
| 输出一行 | print("Hello, World!") |
| 输出不换行 | print("Hi", terminator: "") |
| 字符串插值 | print("Hi \(name)") |
| 注释 | // this is a comment |
| 多行注释 | /* ... */ |
| 导入模块 | import Foundation |
| 运行文件 | swift run 或 swift main.swift |
变量(let / var)与类型
常量用 let,可变的值用 var;类型通常可以自动推断。
| 操作 | 语法 |
|---|---|
| 常量 | let age = 30 |
| 变量 | var count = 0 |
| 显式类型 | let name: String = "Ada" |
| 基本类型 | Int, Double, String, Bool, Character |
| 类型转换 | Double(i), String(n), Int("42") |
| 元组 | let pair = (1, "a") |
| 类型别名 | typealias ID = Int |
| 检查类型 | value is String, value as? String |
可选类型
可选类型表示值可能不存在;使用前要先解包。
| 操作 | 语法 |
|---|---|
| 声明可选类型 | var name: String? = nil |
| 可选绑定 | if let n = name { ... } |
| guard 解包 | guard let n = name else { return } |
| 空合运算符 | let n = name ?? "default" |
| 可选链 | user?.address?.city |
| 强制解包(不安全) | name! |
| 隐式解包 | var name: String! |
| 对可选值做 map | name.map { $0.count } |
字符串
字符串是值类型,完整支持 Unicode。
| 操作 | 语法 |
|---|---|
| 长度 | s.count |
| 转大写 / 小写 | s.uppercased(), s.lowercased() |
| 拼接 | "foo" + "bar" |
| 插值 | "Total: \(price)" |
| 是否包含 | s.contains("ell") |
| 是否有前缀 / 后缀 | s.hasPrefix("he") |
| 拆分 | s.split(separator: ",") |
| 替换 | s.replacingOccurrences(of: "a", with: "b") |
| 多行字符串 | """ ... """ |
集合类型(Array、Dictionary、Set)
三种核心集合类型,都是值类型。
| 操作 | 语法 |
|---|---|
| 数组字面量 | var nums = [1, 2, 3] |
| 追加 | nums.append(4) |
| 访问 / 计数 | nums[0], nums.count |
| map / filter | nums.map { $0 * 2 }, nums.filter { $0 > 1 } |
| 字典字面量 | var ages = ["Ada": 30] |
| 访问字典 | ages["Ada"] 返回可选值 |
| 集合字面量 | var ids: Set = [1, 2, 3] |
| 向集合插入元素 | ids.insert(4) |
| 遍历字典 | for (k, v) in ages { ... } |
流程控制
条件不需要括号;switch 必须穷尽所有情况。
| 操作 | 语法 |
|---|---|
| if / else | if x > 0 { ... } else { ... } |
| 三元运算符 | let r = x > 0 ? "pos" : "neg" |
| switch | switch n { case 1: ...; default: ... } |
| switch 匹配范围 | case 1...5: ... |
| for-in 循环 | for i in 0..<10 { ... } |
| for-in 遍历数组 | for item in items { ... } |
| while 循环 | while x < 100 { ... } |
| repeat-while | repeat { ... } while x < 100 |
| break / continue | break, continue |
函数与闭包
函数的参数带有标签;闭包是自包含的代码块。
| 操作 | 语法 |
|---|---|
| 定义函数 | func add(a: Int, b: Int) -> Int { a + b } |
| 外部参数标签 | func greet(to name: String) { ... } |
| 默认参数 | func greet(name: String = "World") { ... } |
| 可变参数 | func sum(_ nums: Int...) -> Int { ... } |
| 多个返回值(元组) | func bounds() -> (min: Int, max: Int) { ... } |
| 闭包表达式 | let f = { (x: Int) -> Int in x * x } |
| 尾随闭包 | nums.map { $0 * 2 } |
| 参数名简写 | { $0 + $1 } |
结构体与类
结构体是值类型(会被复制);类是引用类型(会被共享)。
| 操作 | 语法 |
|---|---|
| 定义结构体 | struct Point { var x: Int; var y: Int } |
| 定义类 | class Person { var name: String } |
| 类的构造器 | init(name: String) { self.name = name } |
| 创建实例 | let p = Point(x: 1, y: 2) |
| 结构体的 mutating 方法 | mutating func move() { x += 1 } |
| 类的方法 | func greet() { ... } |
| 继承(仅限类) | class Student: Person { ... } |
| 计算属性 | var area: Int { width * height } |
| 静态成员 | static let shared = Manager() |
枚举
枚举把相关的值组织在一起,还可以携带关联数据。
| 操作 | 语法 |
|---|---|
| 定义枚举 | enum Direction { case north, south } |
| 使用某个成员 | let d = Direction.north |
| 对枚举使用 switch | switch d { case .north: ... } |
| 原始值 | enum Status: Int { case ok = 200 } |
| 访问原始值 | Status.ok.rawValue |
| 用原始值初始化 | Status(rawValue: 200) |
| 关联值 | case result(Int, String) |
| 枚举中的方法 | func label() -> String { ... } |
最常用的 Swift 语法,全都在这一页。这份 Swift 速查表是核心语言的快速参考:常量和变量、可选类型、字符串、集合类型、流程控制、函数和闭包,还有开发 iOS 和 macOS 应用时用到的结构体、类和枚举。
这里的内容都是标准 Swift,可以用官方工具链编译。需要什么就复制什么,也可以在 Swift 在线编辑器里直接运行每个代码片段,无需安装 Xcode。
Swift 速查表常见问题
这份 Swift 速查表免费吗?
免费。这份 Swift 速查表完全免费,无需注册。收藏起来,需要查可选类型的写法、闭包语法或集合方法时随时回来看。
在 Swift 中怎样解包可选值?
nil,所以使用前要先解包。安全的做法有:可选绑定(if let n = name { ... })、在函数开头用 guard let、空合运算符(name ?? "default")以及可选链(user?.name)。用 name! 强制解包也能用,但值为 nil 时程序会崩溃,所以只在你完全确定时才用它。Swift 中的结构体和类有什么区别?
struct 是值类型:赋值或传参时会复制一份,修改副本不会影响原值。class 是引用类型:副本共享同一个实例,而且只有类支持继承。Apple 的建议是默认优先使用结构体,需要共享的可变状态或继承时再用类。可以在线练习 Swift 吗?
可以。打开 Swift 在线编辑器,就能在浏览器里运行这份速查表中的任何代码片段,无需安装 Xcode。想要系统学习的话,Coddy 的免费交互式 Swift 课程会带你从可选类型和集合类型一步步学到结构体、类和枚举。
这份速查表适合初学者吗?
适合。内容从最常用的主题(变量、可选类型、流程控制)一直讲到进阶主题(闭包、结构体与类、枚举),第一天就能用上前面几部分,再慢慢掌握其余内容。