001project_wildgrowth/ios/WildGrowth/SF_SYMBOL_使用清单.md

260 lines
9.4 KiB
Markdown
Raw Normal View History

2026-02-11 15:26:03 +08:00
# SF Symbol 使用清单
项目中所有使用 SF Symbol 的位置及对应 symbol 名称。
---
## 一、按文件列出
### VerticalScreenPlayerView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 56 | `arrow.left` | 返回按钮 |
| 154 | `exclamationmark.triangle` | 错误/警告提示 |
| 209 | `book.closed` | 课程/书本占位 |
| 814 | `exclamationmark.triangle` | 错误态占位 |
### MapView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 84 | `exclamationmark.triangle` | 错误提示 |
| 344 | `arrow.left` | 返回按钮 |
| 409 | `iconName`(动态) | 地图头水印,来自 `data.watermarkIcon` |
| 415 | `book.closed.fill` | 地图头水印兜底(无 watermarkIcon 时) |
| 597 | `lock.fill` | 节点锁定状态 |
| 607 | `checkmark` | 节点已完成 |
| 618 | `play.fill` | 节点可播放 |
### LoginView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 51 | `xmark` | 关闭弹窗 |
| 106 | `checkmark.square.fill` / `square` | 同意协议勾选(已选/未选) |
| 176 | `applelogo` | 苹果登录按钮 |
| 364 | `arrow.left` | 返回按钮 |
### ProfileView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 285 | `lock.circle.fill` | 锁定课程标识 |
| 393 | `course.watermarkIconName`(动态) | 课程卡片水印 |
| 421 | `course.watermarkIconName`(动态) | 课程卡片水印 |
| 530 | `exclamationmark.triangle.fill` | 错误提示 |
| 629 | `chevron.right` | 右箭头/进入 |
| 738 | `book.closed` | 空状态/占位 |
| 814 | `xmark.circle.fill` | 关闭/删除 |
| 713 | `pencil` | Label「编辑信息」 |
| 720 | `trash` | Label「删除」 |
### Views/Profile/CyberLearningIDCard.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 174 | `square.and.pencil` | 编辑 |
| 196 | `person.fill` | 头像占位 |
### NoteBottomSheetView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 52 | `quote.opening` | 引用/摘录 |
| 95 | `trash` | 删除 |
| 211 | `ellipsis` | 更多菜单 |
### Views/GrowthView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 71 | `book.closed` | 课程占位 |
| 208 | `lock.circle.fill` | 锁定课程 |
| 578 | `exclamationmark.circle.fill` / `checkmark.circle.fill` | Toast 类型图标 |
| 628 | `trash` | Label「移除课程」 |
| 635 | `doc.text` | Label「查看详情」 |
| 647 | `pencil` | Label「修改课程名称」 |
| 656 | `trash` | Label「移除课程」 |
### Views/Growth/GrowthTopBar.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 22 | `plus` | 添加按钮 |
### ArticleRichTextView.swiftUIKit 菜单)
| 行号 | Symbol | 用途 |
|------|--------|------|
| 740 | `highlighter` | 划线 |
| 745 | `bubble.left.and.bubble.right` | 写想法 |
| 750 | `doc.on.doc` | 复制 |
### Views/DiscoveryComponents.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 63 | `iconName`(动态) | 发现流卡片水印,来自 `item.watermarkIcon` |
| 145 | `iconName`(动态) | 信息流卡片水印,来自 `course.watermarkIcon` |
### Views/CreationHubView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 86 | `arrow.up.circle.fill` | 上传/发布 |
| 194 | `checkmark.circle.fill` | 成功状态 |
| 219 | `xmark.circle.fill` | 失败/关闭 |
| 460 | `icon`(动态) | 列表行图标,见下方取值 |
| 473 | `chevron.right` | 右箭头 |
| 557 | `book.closed` | 空状态 |
**CreationHubRow 的 `icon` 取值(写死在调用处):**
- `folder.fill` — 我的创作
- `doc.text.fill` — 从文档创建
- `arrow.triangle.2.circlepath` — 从已有课程复制
### DesignSystem.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 337 | `photo` | 占位图/无图 |
### Views/PersonaSelectionView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 102 | `chevron.left` | 返回 |
| 172 | `checkmark.circle.fill` | 已选 |
| 177 | `circle` | 未选 |
### Views/CreateCourseInputView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 158 | `doc.fill` | 文档 |
| 180 | `doc.fill` | 文档 |
| 199 | `xmark.circle.fill` | 关闭/清除 |
### Views/GenerationProgressView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 84 | `exclamationmark.triangle.fill` | 错误 |
| 163 | `checkmark.circle.fill` | 成功 |
| 198 | `xmark` | 关闭窗口 |
### NotebookListView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 117 | `lock.doc.fill` | 锁定笔记本 |
| 221 | `book.closed` | 空状态 |
| 193 | `pencil` | Label「编辑信息」 |
| 200 | `trash` | Label「删除」 |
### Views/Profile/ProfileNoteListView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 16 | `note.text` | 笔记列表 |
| 113 | `book.closed` | 空状态 |
### Views/Profile/EditProfileSheet.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 52 | `person.fill` | 头像占位 |
| 65 | `person.fill` | 头像占位 |
| 77 | `camera.fill` | 拍照/相册 |
### Views/Profile/AvatarPicker.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 14 | `photo.stack` | 相册选择 |
### PaywallView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 31 | `xmark.circle.fill` | 关闭 |
| 45 | `lock.open.fill` | 解锁/付费入口 |
| 133 | `checkmark.circle.fill` | 权益项勾选 |
### ToastView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 23 | `exclamationmark.circle.fill` / `checkmark.circle.fill` / `info.circle.fill` | 按 Toast 类型error/success/info |
### NoteTreeView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 136 | `square.and.pencil` | 编辑 |
### NoteListView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 73 | `note.text` | 笔记列表 |
| 218 | `book.closed.fill` | 空状态 |
| 257 | `highlighter` | 划线 |
| 307 | `note.text.badge.plus` | 新建笔记 |
### NoteInputView.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 35 | `quote.opening` | 引用样式 |
### Views/NoteTree/NoteTreeRow.swift
| 行号 | Symbol | 用途 |
|------|--------|------|
| 72 | `pencil` | Label「编辑」 |
| 76 | `trash` | Label「删除」 |
---
## 二、动态 Symbol 来源汇总
| 使用处 | 变量/属性 | 可能取值(来源) |
|--------|-----------|------------------|
| MapView 地图头水印 | `data.watermarkIcon` | 后端 API无则兜底 `book.closed.fill` |
| DiscoveryComponents 卡片水印 | `item.watermarkIcon` / `course.watermarkIcon` | 后端 API |
| ProfileView 课程水印 | `course.watermarkIconName` | 见 CourseModels 逻辑 |
**CourseModels.watermarkIconName 逻辑:**
- 若有 `watermarkIcon` 且非空 → 用该值
- 否则按 `type``system` → `book.closed.fill``single` → `doc.text.fill``vertical_screen` → `rectangle.portrait.fill`,默认 → `doc.text.fill`
---
## 三、按 Symbol 名称汇总(便于替换/统一)
| Symbol | 出现位置(简要) |
|--------|------------------|
| `arrow.left` | VerticalScreenPlayerView, MapView, LoginView 返回 |
| `arrow.up.circle.fill` | CreationHubView 上传 |
| `arrow.triangle.2.circlepath` | CreationHubView 从课程复制 |
| `applelogo` | LoginView 苹果登录 |
| `book.closed` | VerticalScreenPlayerView, ProfileView, GrowthView, CreationHubView, NotebookListView, ProfileNoteListView 占位/空态 |
| `book.closed.fill` | MapView 水印兜底CourseModels 中 type=systemNoteListView 空态 |
| `bubble.left.and.bubble.right` | ArticleRichTextView 写想法 |
| `camera.fill` | EditProfileSheet |
| `checkmark` | MapView 节点完成 |
| `checkmark.circle.fill` | 多处成功/已选/权益勾选 |
| `checkmark.square.fill` / `square` | LoginView 协议勾选 |
| `chevron.left` | PersonaSelectionView 返回 |
| `chevron.right` | ProfileView, CreationHubView 进入下一级 |
| `circle` | PersonaSelectionView 未选 |
| `doc.fill` | CreateCourseInputView |
| `doc.on.doc` | ArticleRichTextView 复制 |
| `doc.text` | GrowthView Label 查看详情 |
| `doc.text.fill` | CreationHubView 从文档创建CourseModels single/默认 |
| `ellipsis` | NoteBottomSheetView 更多 |
| `exclamationmark.circle.fill` | GrowthView/ToastView 错误 |
| `exclamationmark.triangle` | VerticalScreenPlayerView, MapView 警告 |
| `exclamationmark.triangle.fill` | ProfileView, GenerationProgressView 错误 |
| `folder.fill` | CreationHubView 我的创作 |
| `highlighter` | ArticleRichTextView 划线NoteListView 划线 |
| `info.circle.fill` | ToastView info 类型 |
| `lock.fill` | MapView 节点锁定 |
| `lock.circle.fill` | ProfileView, GrowthView 课程锁定 |
| `lock.doc.fill` | NotebookListView 笔记本锁定 |
| `lock.open.fill` | PaywallView 解锁 |
| `note.text` | ProfileNoteListView, NoteListView |
| `note.text.badge.plus` | NoteListView 新建笔记 |
| `pencil` | ProfileView, GrowthView, NotebookListView, NoteTreeRow Label 编辑 |
| `person.fill` | CyberLearningIDCard, EditProfileSheet |
| `photo` | DesignSystem 占位 |
| `photo.stack` | AvatarPicker |
| `play.fill` | MapView 节点播放 |
| `quote.opening` | NoteBottomSheetView, NoteInputView 引用 |
| `rectangle.portrait.fill` | CourseModels vertical_screen 水印 |
| `square.and.pencil` | CyberLearningIDCard, NoteTreeView 编辑 |
| `trash` | 多处 Label/按钮 删除 |
| `xmark` | LoginView, GenerationProgressView 关闭 |
| `xmark.circle.fill` | ProfileView, CreationHubView, CreateCourseInputView, PaywallView 关闭/清除 |
---
*文档根据当前代码静态分析生成,若新增或修改 SF Symbol 请同步更新此清单。*