Menu
CoddyTech

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!
对可选值做 mapname.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 / filternums.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 / elseif x > 0 { ... } else { ... }
三元运算符let r = x > 0 ? "pos" : "neg"
switchswitch 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-whilerepeat { ... } while x < 100
break / continuebreak, 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
对枚举使用 switchswitch 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 课程会带你从可选类型和集合类型一步步学到结构体、类和枚举。

这份速查表适合初学者吗?

适合。内容从最常用的主题(变量、可选类型、流程控制)一直讲到进阶主题(闭包、结构体与类、枚举),第一天就能用上前面几部分,再慢慢掌握其余内容。

Coddy 编程语言插图

在 Coddy 学习 Swift

开始