一同养成写作习惯!这是我参加「日新方案 4 月更文应战」的第30天,点击检查活动概况。

承接上一章的内容,这一章,我们了解一下Combine异步编程结构和MVVM开发方式的概念和原理。

SwiftUI极简教程30:Combine异步编程结构和MVVM开发方式的运用(中)

理论需求联络实践,实践也要根据理论。

别着急,了解了概念和原理后,我们才干更好地前行。

Combine结构

首要,我们先了解下Combine异步编程结构是做什么的。

官方来说,Combine结构为应用程序怎样处理工作供给了一种声明性方法。我们可以运用这个方法为指定的工作源创建单个处理链,而不是结束多个托付回调或结束处理程序闭包。处理链的每个部分都是一个Combine操作符,对从上一步接收到的元素实行不同的操作。

Combine结构有三个目标:

担任发布工作的 Publisher
担任订阅工作的 Subscriber
担任转换工作和数据的 Operator

SwiftUI极简教程30:Combine异步编程结构和MVVM开发方式的运用(中)

简略来说,Combine异步编程结构是一个声明式的API,来根据不同时间接收到的值的不同,实行不同操作。而在本章的事例中,我们在TextField输入框中输入的每次点击都会触发一个工作,这个就是所谓的值。

示例代码:

class RegistrationViewModel: ObservableObject {
@Published var isSubmit: Bool = false
}

要结束Combine异步编程结构,我们需求创建一个符合ObservableObject的类,这儿命名为RegistrationViewModel注册验证,并运用@Published注释我们需求的特色,比方是否确定isSubmit,它是Bool类型,默许是false

每次我们更改isSubmit的值时,将它的值改变为true时,RegistrationViewModel注册验证的类就会发布一个工作给到订阅方,比方这儿订阅方是服务器。服务器接收更新后的值,系统就会继续根据这个值触发对应的操作,比方:print打印出成果。

这如同和我们之前学的@State类型很像,存起来一个值。的确如此,但我们用RegistrationValidator注册验证的类中@Publishe定义后,它不需求在任何视图中,我们就可以在整个App全部视图调用,就不用@State定义,然后@binding绑定了。

MVVM开发方式

另一个有关MVVM开发方式,它是指Model-View-ViewModel方式,简略来说,就是将页面、数据、数据处理分开处理。

Model

你可以把它作为3swift文件来考虑,Model.swift里面是放数据定义的,像之前章节创建的imageModel是Model部分的内容。

示例代码:

import Foundation
struct imageModel: Identifiable {
var id = UUID()
var image: String
var imageName: String
}
#if DEBUG
let imageModels = [
imageModel(image: "image01", imageName: "图片01"),
imageModel(image: "image02", imageName: "图片02"),
imageModel(image: "image03", imageName: "图片03"),
imageModel(image: "image04", imageName: "图片04"),
imageModel(image: "image05", imageName: "图片05"),
imageModel(image: "image06", imageName: "图片06"),
imageModel(image: "image07", imageName: "图片07"),
imageModel(image: "image08", imageName: "图片08"),
imageModel(image: "image09", imageName: "图片09")
]
#endif

SwiftUI极简教程30:Combine异步编程结构和MVVM开发方式的运用(中)

View

View,即视图。这就好说了,我们Xcode创建新项目时自动创建的ContentView首页视图就是View,也就是页面部分。

我们可以创建许多的View视图,像之前创建的DetailView概况视图,我们在View视图只需求结束简略的交互样式就可以了。

示例代码:

struct ContentView: View {
var body: some View {
  Text("Hello World”)
  .padding()
}
}

SwiftUI极简教程30:Combine异步编程结构和MVVM开发方式的运用(中)

ViewModel

ViewModel可能看起来杂乱,但我们可以看到它是View+Model,其实就是数据处理的工作。

在前面我们创建了View页面,也创建了Model数据模型,那么怎样将数据加到页面中,使得数据流动起来,让用户有交互的效果,这就是ViewModel的效果。

比方,我们登录注册页面,当用户名输入的长度不对时,就点击注册时就显现过错提示信息。

我们结束这个逻辑,就可以将这个判别放在ViewModel,然后在View视图引用这个方法。

示例代码:

class RegistrationViewModel: ObservableObject {
 @Published var username = ""
  @Published var isUsernameLengthValid = false
  init () {
   //判别逻辑代码块
 }
}

SwiftUI极简教程30:Combine异步编程结构和MVVM开发方式的运用(中)

以上面的代码为例,我们可以运用@Published绑定username用户名,然后 @Published绑定用户名字长是否经过校验的情况,然后写判别的逻辑在代码块中,当我们username用户名输入时,调用ViewModel里的方法,回来isUsernameLengthValid的情况,View视图根据不同情况展示不同的交互样式。

小结

本章运用的是过往章节的比方,以及最为口语化的言语解说来Combine异步编程结构和MVVM开发方式的概念和原理,至于官方关于这两块内容的描绘和介绍,网上有许多具体的介绍,当然也较为难以了解。

那么下一章,我们根据本章和和上一章的项目,我们来进行实践。

快来动手试试吧!

假如本专栏对你有协助,无妨点赞、谈论、重视~