CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
SwiftUI 开发入门/课时/控制流
RawBlame
课时目录12 节

SwiftUI 开发入门

  1. 01Swift 与 SwiftUI 概览
  2. 02基础语法与类型
  3. 03控制流
  4. 04函数与闭包
  5. 05结构体、类与协议
  6. 06SwiftUI 视图
  7. 07状态管理
  8. 08导航与生命周期
  9. 09并发与 async/await
  10. 10数据持久化
  11. 11MVVM 与架构
  12. 12综合练习

控制流

if/switch/for、Optional Chaining。

25 分钟

控制流

Swift 控制流简洁且表达力强:if/guard、switch 模式匹配、for-in 循环。对照 /roadmaps/swift-ui「控制流」节点,这些语法在 SwiftUI 条件渲染与数据处理中频繁出现。

学习目标

  • 掌握 if/else、guard 提前退出
  • 理解 switch 的模式匹配与 where 子句
  • 使用 for-in、while 与区间 Range
  • 在 SwiftUI 中应用条件视图

核心概念

if、guard 与可选绑定

func greetUser(name: String?, isVIP: Bool) -> String {
    guard let name = name, !name.isEmpty else {
        return "你好,访客"
    }
    if isVIP {
        return "欢迎 VIP \(name)"
    } else {
        return "你好,\(name)"
    }
}

// guard 常用于函数早期返回
func loadLesson(id: Int?) -> String? {
    guard let id = id, id > 0 else { return nil }
    return "课时 #\(id)"
}

guard 解包失败则退出当前作用域,保持后续代码简洁;SwiftUI ViewModel 中常用 guard 校验输入。

switch 模式匹配

enum LessonStatus {
    case notStarted
    case inProgress(percent: Int)
    case completed
    case locked(reason: String)
}

func statusLabel(for status: LessonStatus) -> String {
    switch status {
    case .notStarted:
        return "未开始"
    case .inProgress(let percent):
        return "进行中 \(percent)%"
    case .completed:
        return "已完成"
    case .locked(let reason):
        return "已锁定:\(reason)"
    }
}

// 区间与 where
func grade(score: Int) -> String {
    switch score {
    case 90...100: return "优秀"
    case 70..<90:  return "良好"
    case 0..<70 where score >= 60: return "及格"
    default:       return "不及格"
    }
}

Swift switch 必须穷尽所有 case,无需 break;枚举 + switch 是 SwiftUI 状态机常见写法。

循环与 SwiftUI 条件视图

struct LessonProgressView: View {
    let lessons: [(title: String, done: Bool)]
    let status: LessonStatus

    var body: some View {
        VStack(alignment: .leading, spacing: 12) {
            Text(statusLabel(for: status))
                .font(.headline)

            ForEach(Array(lessons.enumerated()), id: \.offset) { index, lesson in
                HStack {
                    Image(systemName: lesson.done ? "checkmark.circle.fill" : "circle")
                    Text("\(index + 1). \(lesson.title)")
                }
            }

            if case .inProgress(let percent) = status {
                ProgressView(value: Double(percent), total: 100)
            } else if case .locked = status {
                Text("请先完成前置课时")
                    .foregroundStyle(.secondary)
            }
        }
        .padding()
    }
}

SwiftUI 中 if/switch 直接写在 body 内实现条件 UI,类似 React 的 {condition && <Component />}。

与 React/SwiftUI 对照

Swift 控制流React 等价SwiftUI 用法
if let条件渲染前校验解包可选数据
guard elseearly returnViewModel 校验
switch 枚举switch / 对象映射状态 → 视图分支
for-in.map() / for...of数据预处理
if in body{cond && <View />}条件显示组件
ForEach.map(key => ...)列表渲染

React 的三元 {done ? <Check /> : <Circle />} 对应 SwiftUI 的 if/else 或三元 Group。

练习

  • 定义 LessonStatus 枚举,用 switch 返回对应 SF Symbol 名称
  • 写 guard 函数校验邮箱格式非空且含 @
  • 在 SwiftUI View 中用 if case 显示不同进度 UI
  • 用 for-in 计算已完成课时占比

小结

guard 提前退出 + switch 穷尽匹配 + body 内条件视图。 下一课函数与闭包。见 swift-ui-essentials。

加载本节练习…
← 上一课基础语法与类型下一课 →函数与闭包