前言
SwiftUI只是UI,网络请求和Swift一样通用,至于网络请求封装这块我就不在一一赘述,想看的话请看swift 使用 Moya 进行网络请求
下面我来说下网络请求方法,我也是一个初学者,其中有各种不严谨的地方请大家留言,我也会在后续学习中慢慢补充,
1 List 数据加载
Model这块和Swift 没有什么区别,我就不放了
此处只做了一次加载
1、viewmodel处代码
- @Published 修饰符属性 告知 Swift 随时关注这个变量的变化。如果发生任何变化,所有视图中使用了该变量的 body 都将更新。
- 我们将接收到网络请求的数据赋值给 model 属性,这将会触发我们在 步骤 1 中提到的动作。
- init 每次进入执行一次,如果在tabBar 页面,请在init中设置限制,否则每次切换都会执行init代码
//此处我封装的网络请求组件 import YLNetTool class YLStudyVM: ObservableObject { @Published var model: YLStudyModel? = nil init() { getList() } func getList() { YLNetTool.request(target: YLStudyApi.study_list, modelType: YLStudyModel.self) { [weak self]code, model in self?.model = model print("666") } failureBlock: { code, msg in print("???") } } }
@H_404_168@2、row中代码
此处主要是添加 model,个人感觉和Swift中并没有太多区别,可忽略
struct YLStudyRow: View { var model: YLStudyModel.resultModel? = nil var body: some View { vstack(alignment: .leading,spacing: 10) { Text(model?.title ?? "") .font(.system(size: 14,weight: .medium)) .padding(EdgeInsets(top: 10,leading: 15,bottom: 0,trailing: 10)) Text("上次学到:你知道你的钱去哪里了么?") .foregroundColor(RGB(102)) .font(.system(size: 13,weight: .regular)) .padding(EdgeInsets(top: 10,leading: 10,trailing: 10)) HStack { Text("已学习:0%") .foregroundColor(.red) .font(.system(size: 12,weight: .regular)) Spacer() Text("进入学习") .foregroundColor(.white) .font(.system(size: 12,weight: .medium)) .frame(width: 70,height: 24) .background( LinearGradient(gradient: Gradient(colors:[RGB(255,101,86),RGB(249,0)]),startPoint: .top,endPoint: .bottom ) ) .cornerRadius(12) } .padding(EdgeInsets(top: 16,trailing: 10)) } .padding(EdgeInsets(top: 0,bottom: 10,trailing: 10)) .background(Color.white) .cornerRadius(10) } } struct YLStudyRow_Previews: PreviewProvider { static var previews: some View { Group { YLStudyRow() .previewLayout(.fixed(width: 414,height: 120)) } } }
@H_404_168@3、主页面获取网络请求、刷新
struct YLStudy: View { @Observedobject var viewmodel = YLStudyVM() init() { UITableView.appearance().backgroundColor = .clear } var body: some View { List() { Section(header: YLStudyHeader()) { ForEach(0 ..< (viewmodel.model?.getUserBuymicrocourseResults.count ?? 0)) { index in YLStudyRow(model: viewmodel.model?.getUserBuymicrocourseResults[index]) .listRowSeparator(.hidden) } } } .listStyle(.grouped) .background(RGB(245)) .navigationTitle("学习") .navigationBarTitledisplayMode(.inline) } } struct YLStudy_Previews: PreviewProvider { static var previews: some View { YLStudy() } }
@H_404_168@借鉴文章
使用 SwiftUI 开发一个 APP - 列表视图 & 网络请求版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。