实战编程-页面交互
在学习页面交互之前,我们先来了解下MVVM开发模式
。MVVM开发模式,指的是Model-View-ViewModel
模式,简单来说,就是将页面、数据、数据处理分开。
之前的章节内容我们完成的最多的是View
的部分,Model
数据部分在后面的章节中我们也经常提及,这里我们页面交互逻辑用的的逻辑部分,都属于ViewModel
。
在左侧视图工具栏中右键,选择New File,选择Swift
文件,命名为ViewModel
。键入以下的代码:
less
复制代码
import Foundation import SwiftUI class ViewModel: ObservableObject { @Published var isLogin: Bool = false @AppStorage("App_firstLaunch") var Apps_firstLaunch: Bool = true }
引用SwiftUI后,我们创建了一个类ViewModel,遵循ObservableObject
协议。这里声明了2个变量,一个是isLogin
,判断是否登录。另一个是控制引导页,由于引导页是初始首次打开App时才展示,因此需要使用@AppStorage
声明。
声明好必要的参数后,我们来到PageSettingsApp页面,这是整个App加载时展示的页面,也就是@main主函数页面。
首先引用创建好的ViewModel类,代码如下:
ini
复制代码
@StateObject var viewModel = ViewModel()
在主体代码部分,App加载的内容需要根据我们声明好的变量状态进行展示,当我们是第一次展示时,加载引导页GuidePageView,如果不是,则判断是否登录,若没有登录则展示登录页,登录后则展示主页,完整代码如下:
scss
复制代码
import SwiftUI @main struct PageSettingsApp: App { @StateObject var viewModel = ViewModel() var body: some Scene { WindowGroup { if viewModel.Apps_firstLaunch { GuidePageView().environmentObject(viewModel) } else { if viewModel.isLogin { ContentView().environmentObject(viewModel) } else { LoginView().environmentObject(viewModel) } } } } }
完成后,相应地我们在引导页GuidePageView中也需要引用ViewModel类,代码如下:
css
复制代码
@EnvironmentObject var viewModel: ViewModel
声明好后,在引导页最后一页点击按钮操作时,更新Apps_firstLaunch
状态为false
,如下图所示:
同理,在LoginView页面中也需要做同样的操作,引入ViewModel类,将isLogin
状态更新为true
,如下图所示:
整体效果-预览
点击模拟器顶部的“运行
”图标,尝试拖动页面,效果如下:
本章小结
本章涉及到的知识点有点多,如果有哪一块不太了解可以重复看一下实现细节。其实在过往的产品研发过程中,产品、设计、开发,本身就是一体化的工作,只是现在因为劳动分工导致的职业化罢了。
其中引导页、登录页为上两章节的内容,如果不太了解,可以先行学习上两章节内容再回到本章进行学习。
在本章中首次使用到了MVVM开发模式,相比较MVC模式,代码更加清晰简洁,更适合协同开发。当然对个人开发者来说,也更好地符合面向对象编程的方式,但具体使用什么开发方式,还是要根据不同开发环境和业务需求制定。
还是那句,说再多不如自己敲一遍,学习最好的方法便是吸收、转化、输出。下面的章节我们继续来学习和完成一个又一个项目,敬请期待吧~