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 的核心思想:

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
}

核心概念:

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 的语言。学会它,你能开发苹果全部五个平台:

此外还有:

5. 推荐学习路径

从这里到"能上架 App Store",大致分四阶段:

  1. 巩固语言(1~2 周):把本系列代码全敲一遍,自己改改跑跑。重点:可选类型、闭包、协议、错误处理——这四个是日常 80% 的难点。
  2. SwiftUI 入门(2~3 周):跟着 Apple 官方 "100 Days of SwiftUI"(免费)做完整项目,学会 List / NavigationStack / 表单 / 网络请求。
  3. 真实项目(1~2 个月):做一个待办、记账或天气 App,接入 URLSession + Codable 调真实 API,用 @AppStorage 持久化。
  4. 深入与上架:学并发(actor / Task)、状态管理(@Observable)、测试(XCTest)、上架流程(证书、TestFlight、App Store Connect)。

6. 必备资源

7. 项目练习建议

光看不练学不会编程。下面是按难度递增的练手项目:

小结

到这里,Swift 语言入门系列就结束了。你已经掌握了变量、类型、控制流、函数、可选、字符串、集合、类与结构体、协议、闭包、错误处理这些地基——足够开始 SwiftUI 的学习了。接下来真正有趣的旅程是做出一个能上架 App Store 的产品。坚持敲代码,半年后回头看,你会惊讶自己走得多远。

← 上一篇 Swift 错误处理

← 返回 Swift 教程目录

✈️💬