Swift 进阶与下一步
恭喜你走到了这里!本系列前 15 篇已经覆盖了 Swift 语言本身——从变量、类型到闭包、协议、错误处理。但学会语言不等于能做 App。这一篇带你认识接下来要学的:SwiftUI(写界面)、async/await(写异步)、Combine(响应式)、苹果全平台,以及一套从"读语法"到"做出 App"的练习路径。
1. SwiftUI:声明式 UI 的未来
SwiftUI 是 Apple 2019 年推出的现代 UI 框架,用声明式语法写界面——你描述"UI 应该长什么样",框架负责把它渲染出来。它取代了用了十多年的 UIKit(命令式 + Storyboard)。一个完整的 SwiftUI 程序长这样:
// SwiftUI:用声明式语法写 UI,2019 年起 Apple 主推
import SwiftUI
struct ContentView: View {
@State private var count = 0 // 状态变化 → 自动刷新视图
var body: some View {
VStack(spacing: 20) { // 垂直布局(尾随闭包)
Text("点击次数: \(count)")
.font(.title)
Button("点我 +1") {
count += 1 // 改 @State,UI 自动重绘
}
.buttonStyle(.borderedProminent)
if count > 5 {
Text("点够啦!")
.foregroundStyle(.red)
}
}
.padding()
}
}
// Preview:Xcode 里实时预览(不用跑模拟器)
#Preview {
ContentView()
}SwiftUI 的核心思想:
- 视图是状态的函数:
body根据@State自动重绘,你不再手动调reloadData。 - 尾随闭包嵌套:
VStack里嵌套Text和Button,一眼看出布局层次。 - 跨平台同一套代码:同一份
View在 iOS / macOS / watchOS 都能跑(平台差异用#if os())。 - 实时预览:Xcode Canvas 不用跑模拟器就能看效果。
2. async/await:现代并发
Swift 5.5 引入 async/await,把异步代码写得像同步代码一样直白。这是 Apple 在大力推的方向,新代码优先用它,而不是闭包回调或 Combine:
// async/await(Swift 5.5+):比闭包回调更直白的异步代码
func fetchUser() async throws -> User {
let (data, _) = try await URLSession.shared.data(from: url)
return try JSONDecoder().decode(User.self, from: data)
}
// 调用:必须在 Task 或 async 上下文里
Task {
do {
let user = try await fetchUser()
print(user)
} catch {
print("失败: \(error)")
}
}
// 并发:多个 async 任务同时跑
async let a = fetchUser() // 不 await,先发起
async let b = fetchUser()
let (ua, ub) = try await (a, b) // 一起等,总耗时 ≈ 单次
// 结构化并发:TaskGroup 管理一批任务
let images = try await withThrowingTaskGroup(of: Image.self) { group in
for url in urls {
group.addTask { try await loadImage(url) }
}
var result: [Image] = []
for try await img in group { result.append(img) } // 按完成顺序收
return result
}核心概念:
- async:标记函数为异步。
- await:等待异步结果(挂起当前任务,不阻塞线程)。
- Task:在同步上下文里启动异步任务。
- actor:并发安全的"类",自动串行化属性访问,替代手动加锁。
- 结构化并发:TaskGroup 让一批子任务有父子关系,父任务等所有子任务完成。
3. Combine:响应式编程
Combine 是 Apple 2019 年推出的响应式框架,把"值随时间变化"抽象成流(Publisher),用运算符组合处理。它在 async/await 出现前是异步主力,现在新代码用得少了,但旧项目大量存在,值得一读:
// Combine:响应式编程(用得越来越少,但旧代码常见)
// 把"值的变化"当成流,用运算符串联
import Combine
// @Published:属性变化自动发通知
class Counter: ObservableObject {
@Published var count = 0
}
let counter = Counter()
let cancellable = counter.$count // 发布流
.filter { $0 >= 0 } // 过滤
.map { "当前: \($0)" } // 转换
.sink { print($0) } // 订阅
counter.count = 1 // 打印: 当前: 1
counter.count = 5 // 打印: 当前: 5
// 现代 Swift 里:状态管理优先用 @State / @Observable(async/await 替代回调)
// Combine 留给"复杂的值流组合"场景取舍:新项目状态管理用 @Observable(Swift 5.9+,比 @Published 更精细),网络请求用 async/await,只有"多个值流复杂组合"才考虑 Combine。
4. 苹果全平台:一次学习,五处落地
Swift 不只是 iPhone 的语言。学会它,你能开发苹果全部五个平台:
- iOS:iPhone / iPad 应用,App Store 最大的金矿。
- macOS:Mac 桌面 App,SwiftUI 已能写出像样的原生应用。
- watchOS:Apple Watch,健康/运动/快捷信息场景。
- tvOS:Apple TV,视频流媒体与游戏。
- visionOS:Vision Pro 空间计算,Apple 押注的下一个大平台。
此外还有:
- Swift on Server:Vapor、Hummingbird 框架,用 Swift 写后端。
- Swift Playground:iPad 上教孩子学编程。
- 嵌入式 Swift:Swift 5.9+ 实验性支持,可跑在 ARM 微控制器。
5. 推荐学习路径
从这里到"能上架 App Store",大致分四阶段:
- 巩固语言(1~2 周):把本系列代码全敲一遍,自己改改跑跑。重点:可选类型、闭包、协议、错误处理——这四个是日常 80% 的难点。
- SwiftUI 入门(2~3 周):跟着 Apple 官方 "100 Days of SwiftUI"(免费)做完整项目,学会 List / NavigationStack / 表单 / 网络请求。
- 真实项目(1~2 个月):做一个待办、记账或天气 App,接入 URLSession + Codable 调真实 API,用
@AppStorage持久化。 - 深入与上架:学并发(actor / Task)、状态管理(@Observable)、测试(XCTest)、上架流程(证书、TestFlight、App Store Connect)。
6. 必备资源
- 官方文档:developer.apple.com/swift——权威、最新,WWDC 视频每年更新。
- 100 Days of SwiftUI:Paul Hudson 的免费课程,公认最佳入门路径。
- Swift by Sundell:John Sundell 的周刊与播客,深度文章。
- Hacking with Swift:免费小教程,查 API 用法极快。
- Swift Forums:forums.swift.org,语言演进与社区讨论。
- GitHub 开源项目:读源码学架构,推荐 Apple 官方 Sample Apps、SwiftUI 官方 Tutorials。
7. 项目练习建议
光看不练学不会编程。下面是按难度递增的练手项目:
- 难度 1:计算器、记事本、番茄钟——练基本 UI 与状态。
- 难度 2:待办清单(本地持久化)、天气 App(调 API)、记账本(Core Data)。
- 难度 3:简易微博、聊天 App(WebSocket)、内容订阅 App(StoreKit 内购)。
- 难度 4:跨平台 App(同一份代码跑 iPhone + Mac)、Vision Pro 空间应用。
小结
到这里,Swift 语言入门系列就结束了。你已经掌握了变量、类型、控制流、函数、可选、字符串、集合、类与结构体、协议、闭包、错误处理这些地基——足够开始 SwiftUI 的学习了。接下来真正有趣的旅程是做出一个能上架 App Store 的产品。坚持敲代码,半年后回头看,你会惊讶自己走得多远。
← 上一篇 Swift 错误处理
← 返回 Swift 教程目录