- macOS:13.4
- Xcode:14.3.1
- Swift:5.8.1
- 链接地址:https://bilibili.com/video/BV144411C7Gg
- 掌握程度:swift语法
- Nick Sarno-SwiftUI62集入门 基础部分(布局、组件、动画等)
- Nick Sarno-SwiftUI高级教程(数据封装、网络请求、数据监听、View封装等)
- Nick Sarno-SwiftUI CXrypto App教程半天(数据封装、网络请求、View封装等)
项目主体框架搭建:使用TabView+NavigationStack
- 首页
- 导航
- 项目
- 消息
- 我的
网络请求:
- API:网络接口
- Router:BaseURL、method、path、params封装
- APIService:接口实现类(参数、返回model)
- token认证:登录完成后,将token保存到AppStorage中,请求时读取AppStorage中的数据设置到cookie上
Model(数据类):
- 将接口结果快速解析(可以封装返回实体Bean的扩展):https://app.quicktype.io
- 每个解析结果都有:newJSONDecoder、newJSONEncoder,抽取协议ModelProtocol
ViewModel(MVVM设计模式):
- xxxViewModel继承ObservableObject
- 在xxxViewModel中声明接口返回的Model数据,调用接口返回后接收
使用到的类库:
- Alamofire:网络请求
- AlamofireObjectMapper:Alamofire的扩展,它使用ObjectMapper自动将JSON响应数据转换为swift对象
使用到的类库
功能开发
- 自定义视图
- NavigationLink导航
- view抽取
使用到的组件
- Section:列表分组
- LazyVGrid:网格布局
使用到的组件
- Picker:菜单
功能开发
1-导航菜单
- 调用项目分类接口,展示导航菜单(每个菜单有一个对应id,作为cid,获取项目列表数据
- 定义一个字典,一个存储项目名称,另一个存储对应id(cid),在项目分类接口完成后设置
2-菜单下的文章
- 点击导航菜单时,从字典中取出对应的cid,获取项目列表数据
- 定义一个字典,一个存储cid,一个存储文章列表<Article>,在项目列表数据接口完成后设置
使用到的状态或配置信息
- environmentObject:整个应用程序中共享数据。本项目中用于共享登录信息
视图导航变化:
- 之前:NavigationLink
- 现在:Modal
功能开发:
- 登录、注册界面(登录状态、用户信息)
- 我的-用户信息显示
功能开发:
- 消息-已读
- 消息 -未读
- 消息item(点击)-详情页
- 点击标签切换到对应的视图
- 通过onReceive方法,监听标签的切换,显示相应的视图
- 数据实体类(bean)由quicktype.io生成改为AlamofireObjectMapper
- 解决能够接收到数据,页面无法显示问题
- 导入WrappingHStack自动换行库
- 重构导航布局页面
- 添加置顶文章接口和界面开发
- ArticleItem界面更新(置顶标签、Title、content显示等)
- 界面间跳转传递数据:( @State定义变量+ $selectTreeItem传递+ self.selectTreeItem = treeItem(点击复制))—直接传递出错(不变)
- 接收到数据之后,在ViewModel中设置方法处理,并在onAppear中调用viewModel.set方法处理(比如遍历-设置值)
- 从首页跳转网页的方式由:Sheet弹窗改为fullscreencover
- web添加tabbar(标题和返回按钮)
接口:
- 首页-轮播图:homeBanner
- 首页-文章列表 :homeArticleList
- 导航:tree
- 项目:project
- 项目文章:projectArticle
- 消息-未读:messageUnRead
- 消息-已读:messageRead
- 用户登录:login
- 积分-用户信息:coinUserInfo
功能开发:
- 上拉刷新、下拉加载
- 没网、错误信息显示、错误点击重新加载
接口:
- 剩余接口
参考依赖
- 本项目按照:接口(API)+视图(组件、布局)+逻辑处理(ViewModel)+接口返回数据(Model)的模式进行开发
- swiftUI练手项目,可能存在代码不规范等错误,如有错误还望指正