分五大部分:
-
View:主要写界面上的UI实现(控制器)
-
Presenter:英文翻译是主持者,主要放业务逻辑,例如点击事件的逻辑,分担控制器的负担,放一些方法的实现,供控制器来调用。(一般NSObject类型)
View 和 Presenter 之间的通信可以通过专门定义协议的类来实现。
例如:
// Presenter 调用 View 的方法,View遵守该协议,方法实现写在 View 中
protocol exampleInput: class {
func setupEmptyState()
func setRefreshButtonHidden(_ hidden: Bool)
}
// View 调用 Presenter 的方法,Presenter遵守该协议,方法实现写在 Presenter 中
protocol exampleOutput {
func handleViewWillAppear()
func handleToggleAddToCalendar()
}
在 Presenter 中创建一个View类型的属性,在View中创建一个Presenter 类型的属性,在初始化完各自赋值,就可以在各自类中调用了。(注意:其中一个需要用weak,防止循环引用)
- Wireframe:相当于Router,处理界面之间跳转的逻辑
- View 和 Presenter以及 Interactor 的初始化也在该类中,提供接口,供其他模块调用和跳转界面。
- 作为 Presenter 的一个属性被传入 Presenter ,Presenter 可以调用 Wireframe 中界面跳转的方法跳到其他的界面。
- Wireframe 和 Presenter 之前的通信也是通过协议,同上,但是一般 Presenter 调用 Wireframe 中的方法,不需要双向调用。
- 为了实现 Presenter 调用其他模块的方法,将其他模块的Wireframe作为对象传进来并传给Presenter,调用它的协议方法来实现。
- Interactor:处理主要的业务逻辑,主要是和 Presenter 进行交互,Presenter调用 Interactor 的方法请求数据,请求结果调用 Presenter 的方法返回给View进行显示。除此之外,Interactor 也处理其他的逻辑,视情况而定。
- Entities:相当于model,枚举、结构体等类型。
总结:VIPER(View Interactor Presenter Entities Router(Wireframe))将MVC中Controller中的逻辑拆分成Presenter、Interactor、Router,在中业务逻辑越来越多的时候不至于让控制器难以维护。VIPER的Presenter的主要工作是在View和Interactor之间传递事件,并管理一些View的展示逻辑,主要的业务逻辑实现代码都放在了Interactor里。
网友评论