# Swift (SwiftUI) 项目:“每日名言” iOS App ## 概述 使用 Swift 和 SwiftUI 构建一个设计简洁的 iOS 应用。应用每天从 API 获取并展示一条名言,支持收藏和分享,并提供主屏幕小组件。 ## 功能需求 ### 1. 主屏幕 (Quote View) - **每日名言**: 启动时自动从 API 请求并显示名言及其作者。 - **背景**: 使用高质量图片或渐变色作为背景。 - **操作**: 提供刷新、分享(通过原生 Share Sheet)和收藏(保存到本地)按钮。 ### 2. 收藏夹 (Favorites View) - **导航**: 从主屏幕可跳转至此页面。 - **列表**: 使用 `List` 展示所有收藏的名言。 - **持久化**: 收藏记录需本地持久化(`Core Data`, `SwiftData`, 或 `UserDefaults`)。 - **删除**: 支持左滑删除收藏。 ### 3. 小组件 (WidgetKit) - **主屏幕小组件**: 创建一个展示每日名言的 iOS 主屏幕小组件。 - **自动更新**: 小组件能每天自动更新内容。 ## 技术栈 - **语言**: Swift - **UI**: SwiftUI - **生命周期**: SwiftUI App Life Cycle - **网络**: `URLSession` with `async/await` - **持久化**: `Core Data`, `SwiftData` (iOS 17+), 或 `UserDefaults`+`Codable` - **状态管理**: `@State`, `@StateObject`, `@EnvironmentObject` - **小组件**: WidgetKit - **API**: 免费名言 API (e.g., `zenquotes.io`, `quotable.io`) ## 项目结构 (Xcode) ``` /QuoteApp ├── QuoteApp/ # 主应用 Target │ ├── Views/ # SwiftUI 视图 │ ├── ViewModels/ # ViewModels │ ├── Models/ # 数据模型 │ ├── Services/ # 网络和数据服务 │ └── QuoteAppApp.swift # 应用入口 └── QuoteAppWidget/ # Widget Target └── QuoteAppWidget.swift ``` ## 任务步骤 1. **初始化**: 在 Xcode 中创建新的 SwiftUI 应用项目。 2. **API服务**: 创建 `QuoteAPIService`,使用 `async/await` 获取名言。定义 `Quote` 模型以匹配 JSON 响应。 3. **持久化**: 选择并设置一种本地数据持久化方案。 4. **ViewModel**: 创建 `QuoteViewModel` (`ObservableObject`),负责获取数据、处理收藏和分享逻辑。 5. **主视图**: 设计 `QuoteView` 并与 ViewModel 连接。使用 `UIViewControllerRepresentable` 封装 `UIActivityViewController` 以实现分享。 6. **收藏夹**: 创建 `FavoritesView`,从本地存储中读取并显示列表,实现删除功能。 7. **导航**: 使用 `NavigationStack` 或 `NavigationView` 连接主视图和收藏夹。 8. **小组件**: 添加 Widget Extension Target,在 `TimelineProvider` 中实现每日更新逻辑,并设计小组件 UI。 9. **UI/UX**: 添加动画,优化字体和颜色,提升视觉体验。 **先行任务**: 选定一个名言 API 并研究其文档。设计 App 主屏幕和小组件的线框图。