news 2026/5/16 8:13:40

从Firestore获取学生成绩的实践指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从Firestore获取学生成绩的实践指南

在开发移动应用或管理系统时,数据存储和获取是不可或缺的一部分。特别是对于教育机构或学校项目来说,学生成绩的管理尤为重要。本文将介绍如何使用Firebase的Cloud Firestore来获取学生的成绩信息,并展示如何将这些数据集成到SwiftUI应用中。

1. Firestore结构

首先,让我们看看Firestore的数据库结构:

Students (Collection) - id: "20704029" - email: "example@example.com" - studentName: "John" - studentSurname: "Doe" - studentGrades (Array) - 0 - lectureGradeId: "L001" - midTerm: "85" - endTerm: "90" - 1 - lectureGradeId: "L002" - midTerm: "75" - endTerm: "88"
2. 定义数据模型

在Swift中,我们需要定义一个StudentsGrades的结构体来匹配Firestore中的数据:

importFoundationimportFirebaseFirestorestructGrades:Codable,Hashable{varlectureGradeId:StringvarmidTerm:StringvarendTerm:String}structStudents:Identifiable,Codable{varid:Stringvaremail:StringvarstudentName:StringvarstudentSurname:StringvarstudentGrades:[Grades]?}
3. 获取数据

StudentsViewModel中,我们使用Firestore的查询来获取学生数据:

importFoundationimportFirebaseclassStudentsViewModel:ObservableObject{@Publishedvarstudents=[Students]()privatevardb=Firestore.firestore()funcfetchData(){db.collection("Students").whereField("id",isEqualTo:"20704029").addSnapshotListener{(querySnapshot,error)inguardletdocuments=querySnapshot?.documentselse{print("No documents")return}self.students=documents.compactMap{document->Students?indo{letstudent=trydocument.data(as:Students.self)returnstudent}catch{print("Error decoding document:\(error)")returnnil}}}}}
4. 显示数据

在SwiftUI中,我们可以使用ForEach来展示学生的成绩信息:

importSwiftUIstructGradesPage:View{@StateObjectprivatevarviewModel=StudentsViewModel()varbody:someView{NavigationStack{List(viewModel.students){studentinVStack(alignment:.leading){Text("Student Name:\(student.studentName)\(student.studentSurname)")ifletgrades=student.studentGrades{ForEach(grades,id:\.lectureGradeId){gradeinVStack(alignment:.leading){Text("Course ID:\(grade.lectureGradeId)")Text("Mid Term:\(grade.midTerm)")Text("End Term:\(grade.endTerm)")}}}}}}.onAppear{self.viewModel.fetchData()}}}
结论

通过上述步骤,我们成功地从Firestore中获取了学生的成绩信息,并将其集成到SwiftUI界面中。这样的实现不仅能帮助学生查看自己的成绩,还能为教师或管理人员提供一个直观的数据管理界面。记住,在实际应用中,可能需要处理错误、数据验证以及UI的进一步优化,但这个例子为你提供了从Firestore获取和展示数据的基本流程。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 23:51:41

HY-Motion 1.0镜像免配置实战:24GB显存跑通Lite版动作生成

HY-Motion 1.0镜像免配置实战:24GB显存跑通Lite版动作生成 1. 为什么这次动作生成真的不一样了? 你有没有试过在3D软件里调一个自然的挥手动作?手动K帧、调整FK/IK、反复预览——一上午就过去了。或者想快速给游戏角色加一段“打太极”或“…

作者头像 李华
网站建设 2026/5/15 3:26:10

解决媒体库工具资源加载难题:3个实用方案与避坑指南

解决媒体库工具资源加载难题:3个实用方案与避坑指南 【免费下载链接】MoviePilot NAS媒体库自动化管理工具 项目地址: https://gitcode.com/gh_mirrors/mo/MoviePilot 媒体库管理工具极大地简化了我们对影视资源的管理,但资源访问问题却常常困扰着…

作者头像 李华
网站建设 2026/5/1 4:14:34

告别机械操作:网易云音乐自动打卡的效率革命

告别机械操作:网易云音乐自动打卡的效率革命 【免费下载链接】neteasy_music_sign 网易云自动听歌打卡签到300首升级,直冲LV10 项目地址: https://gitcode.com/gh_mirrors/ne/neteasy_music_sign 作为网易云音乐的忠实用户,你是否曾为…

作者头像 李华
网站建设 2026/5/12 0:08:21

DeepSeek-OCR-2开箱即用:本地隐私安全的文档解析神器

DeepSeek-OCR-2开箱即用:本地隐私安全的文档解析神器 你有没有过这样的经历:手头有一份扫描版PDF合同,想把里面的内容复制出来修改,结果双击全是“无法选择文字”;或者收到一张带表格的财务截图,手动敲进E…

作者头像 李华
网站建设 2026/5/8 1:43:43

5分钟快速部署CTC语音唤醒:移动端‘小云小云‘一键搭建教程

5分钟快速部署CTC语音唤醒:移动端“小云小云”一键搭建教程 你是否想过,让一台普通Linux服务器秒变“语音唤醒终端”?不需要安卓开发、不依赖云端API、不折腾NDK交叉编译——只要5分钟,就能在本地跑起一个真正面向移动端优化的轻…

作者头像 李华
网站建设 2026/5/5 1:36:41

Z-Image-Turbo实测对比:比SDXL快还省显存

Z-Image-Turbo实测对比:比SDXL快还省显存 你有没有过这样的体验:在AI绘画工具里输入一句精心打磨的提示词,按下生成键后——盯着进度条数秒、刷新页面、再等几秒、终于出图,结果发现细节糊了、手长了三只、文字错位……更别提想批…

作者头像 李华